如何在C ++中初始化静态字段?

时间:2015-06-25 09:36:47

标签: c++

我需要一个静态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'错误。如何解决我的问题?

2 个答案:

答案 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;

在类定义中,它只是声明。