如何在 C++ 中初始化静态字段? [复制]
Posted
技术标签:
【中文标题】如何在 C++ 中初始化静态字段? [复制]【英文标题】:How to initialize static fields in C++? [duplicate] 【发布时间】:2015-06-25 09:36:47 【问题描述】:我需要一个带有静态 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'
错误。如何解决我的问题?
【问题讨论】:
在名称is reserved to the compiler/standard library中使用双下划线。 【参考方案1】:在 C++ 中定义静态成员时,需要写两次:第一次在类定义中:
static std::vector<int> simples;
然后在外部(最好在外部 .cpp 文件中):
std::vector<int> MyClass::simples;
如果您了解 C 语言,这可以帮助您:C++ 中的静态成员与 C 中的全局变量类似:定义为 .h 文件中的原型,在您需要时包含在其中,并在一个 .c/ 中初始化值。 cpp 文件。
【讨论】:
【参考方案2】:你必须在类外定义静态数据成员
std::vector<int> MyClass::simples;
在类定义中它只被声明。
【讨论】:
以上是关于如何在 C++ 中初始化静态字段? [复制]的主要内容,如果未能解决你的问题,请参考以下文章