如何在 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++ 中初始化静态字段? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 类中调用静态库函数? [复制]

如何使用静态方法初始化静态变量? [复制]

如何在构造函数 C++ 中使用静态变量?

如何在C ++中同步静态字段

如何将静态数组初始化为 C++ 函数中的某个值?

如何在可配置计数的静态结构数组中初始化具有特定值的成员? [复制]