static const C ++类成员初始化在链接时给出重复的符号错误

时间:2010-05-22 16:12:03

标签: c++ static

我有一个具有静态const数组的类,它必须在类外部初始化:

class foo{  
static const int array[3];  
};    
const int foo::array[3] = { 1, 2, 3 };

然后我在foo.o和main.o中得到一个重复的符号foo :: array foo.o持有foo类,main.o持有main()并使用foo的实例 如何在foo的所有实例之间共享此静态const数组?我的意思是,这就是静态成员的想法。

1 个答案:

答案 0 :(得分:8)

在相应的.cpp文件中初始化它,而不是.h文件。

当你#include时,它是一个预处理器指令,它基本上将文件逐字复制到#include的位置。所以你通过将它包含在2个不同的编译单元中来初始化它两次。

链接器看到2并且不知道使用哪一个。如果你只在一个源文件中初始化它,那么只有一个.o会包含它,你就不会有问题。