我需要一个静态std::vector<int> simples
的类(前N个简单数字)。我在静态方法__init__
中创建它,在创建任何MyClass实例之前调用它:
class MyClass
{
public:
MyClass()
{
/* I need to use MyClass::simples here */
printf("%d\n", (int)MyClass::simples.size());
/* But I get the error here :( */
}
static void __init__(int N)
{
simples.push_back(2);
/* ...
here I compute first N simple numbers and fill
MyClass::simples with them
*/
}
private:
static std::vector<int> simples;
};
int main()
{
MyClass::__init__(1000);
MyClass var;
return 0;
}
但是当我尝试在构造中使用此向量时,出现undefined reference to 'MyClass::simples'
错误。如何解决我的问题?
答案 0 :(得分:1)
在C ++中定义静态成员时,需要编写两次:首先在类定义中编写:
static std::vector<int> simples;
然后在外面(最好在外部.cpp文件中):
std::vector<int> MyClass::simples;
如果您了解C语言,这可以帮助您:C ++中的静态成员与C中的全局变量相当:在您需要的时候定义为.h文件中的原型,并在一个.c /中初始化值。 cpp文件。
答案 1 :(得分:0)
您必须在类
之外定义静态数据成员std::vector<int> MyClass::simples;
在类定义中,它只是声明。