据我所知,所有整数类型都可以在头文件中初始化。 这就是为什么我觉得这种声明在我的一个标题中是正确的(让我们称之为foo.h):
class Foo {
public:
static const unsigned int DEFAULT = 0xffffffff;
...
};
在发布模式下编译和链接时,它有效。 但是,当我在调试模式下编译代码时,我收到以下错误:
undefined reference to `Bar::Foo::DEFAULT'
collect2: ld returned 1 exit status
当我将初始化移动到foo.cpp时,问题解决了:
const unsigned int Foo::DEFAULT = 0xffffffff;
但我不明白为什么。有人猜吗?
(我在Ubuntu上使用gcc 4.2.4)
答案 0 :(得分:0)
您已初始化成员,但未定义。您仍需要在单个实施文件中使用const unsigned int Foo::DEFAULT;
。
在发布版本中,对成员的引用可能已被优化掉(即替换为值内联,因为您告诉编译器它不会被更改)因此不会查找符号。调试不是那么宽松 - 编译器现在想要知道你的成员被定义并驻留在内存中的某个地方。