标签:c initialization static-members
在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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。