[英]Can a C++ class contain a static const std::array initialized inline in a header file?
[英]Should a const static variable be initialized in a c++ header file?
my_test.h
#ifndef MY_TEST
#define MY_TEST
struct obj {
int x;
int y;
};
class A {
private:
const static int a=100;
const static obj b;
};
const obj A::b={1,2};
#endif
使用此头文件编译cpp时,会出现错误'multiple definition of 'A::b'
。
A::a
为什么不产生错误? (我不能在class A
编写代码const static obj b={1,2}
) Alok已经回答了你的问题,但这里有一些简单的经验法则,易于记忆:
因此,静态成员需要在.h文件中声明 ,然后在.cpp文件中定义 。 在您的情况下,修复声明的语法,然后将它们移动到“my_test.cpp”文件。
问题是你对A::b
定义不包含类型。 要成为有效的定义,它应该是:
const obj A::b = {1, 2};
这将消除编译错误,但如果将此标头包含在多个源文件中,您仍会遇到链接器错误,因为A::b
将被多重定义。 您应该将定义移动到.cpp文件中。
无论您是否有头文件保护,将初始化放在头文件中意味着您将在包含该头文件的每个源文件中获得A::b
的实例。 因此链接器错误。
所以,一般来说,这是可能的,但不是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.