其他分享
首页 > 其他分享> > 如何在C中初始化私有静态成员?

如何在C中初始化私有静态成员?

作者:互联网

在C中初始化私有静态数据成员的最佳方法是什么?我在头文件中尝试了这个,但它给了我奇怪的链接器错误:

class foo
{
    private:
        static int i;
};

int foo::i = 0;

我猜这是因为我无法从课外初始化私人成员.那么最好的方法是什么?

解决方法:

类声明应该在头文件中(如果不共享,则在源文件中).
文件:foo.h

class foo
{
    private:
        static int i;
};

但是初始化应该在源文件中.
文件:foo.cpp

int foo::i = 0;

如果初始化在头文件中,那么包含头文件的每个文件都将具有静态成员的定义.因此,在链接阶段,您将获得链接器错误,因为初始化变量的代码将在多个源文件中定义.

注意:Matt Curtis:指出如果静态成员变量是const int类型(例如int,bool,char),C允许简化上述内容.然后,您可以直接在头文件中的类声明中声明和初始化成员变量:

class foo
{
    private:
        static int const i = 42;
};

标签:c,initialization,static-members
来源: https://codeday.me/bug/20190911/1802757.html