c++ - 如何实例化对象的静态 vector ?

标签 c++ instantiation static-members

我有一个类 A,它有一个对象的静态 vector 。对象属于B类

class A {
  public:
    static void InstantiateVector();
  private:
    static vector<B> vector_of_B;
}

在函数 InstantiateVector() 中

for (i=0; i < 5; i++) {
  B b = B();
  vector<B>.push_back(b);
}

但是我在使用 visual studio 2008 时出现编译错误:未解析的外部符号... 是否可以使用上述方法实例化静态 vector ?要创建对象 b,必须从输入文件中读取一些数据,并将其存储为 b 的成员变量

或者不可能,只有简单的静态 vector 是可能的?我在某处读到要实例化静态 vector ,必须先定义一个const int a[] = {1,2,3},然后将a[]复制到 vector 中

最佳答案

您必须按如下方式提供 vector_of_b 的定义:

// A.h
class A {
  public:
    static void InstantiateVector();
  private:
    static vector<B> vector_of_B;
};

// A.cpp
// defining it fixes the unresolved external:
vector<B> A::vector_of_B;

作为旁注,您的 InstantiateVector() 制作了很多不必要的拷贝,这些拷贝可能会(也可能不会)被优化掉。

vector_of_B.reserve(5);  // will prevent the need to reallocate the underlying
                         // buffer if you plan on storing 5 (and only 5) objects
for (i=0; i < 5; i++) {
  vector_of_B.push_back(B());
}

事实上,对于这个您只是默认构造 B 对象的简单示例,最简洁的方法就是将循环全部替换为:

// default constructs 5 B objects into the vector
vector_of_B.resize(5);

关于c++ - 如何实例化对象的静态 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531981/

相关文章:

c++ - 我可以在 Windows Xp Pro SP3 系统上配置漫游用户配置文件吗?

c++ - 在 Makefile 中链接 SDL 库,c++

java - 在类本身中创建一个实例

vb.net - 有什么方法可以基于枚举实例化一个新类吗?

c++ - 模板类的静态成员数组的延迟初始化

java - POJO 中的静态变量以及对象和类的垃圾回收

c++ - 如何忽略除第一个字符以外的所有字符?

c++ - 奇怪的堆损坏问题?

c++ - 在显式实例化的情况下,类模板的成员函数是否可以内联?

c# - 为什么 CLR 通过初始化优化掉未使用的静态字段?