由于头中的unsigned int初始化,调试模式链接失败

时间:2013-04-10 09:19:39

标签: c++ linker linker-errors

据我所知,所有整数类型都可以在头文件中初始化。 这就是为什么我觉得这种声明在我的一个标题中是正确的(让我们称之为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)

1 个答案:

答案 0 :(得分:0)

您已初始化成员,但未定义。您仍需要在单个实施文件中使用const unsigned int Foo::DEFAULT;

在发布版本中,对成员的引用可能已被优化掉(即替换为值内联,因为您告诉编译器它不会被更改)因此不会查找符号。调试不是那么宽松 - 编译器现在想要知道你的成员被定义并驻留在内存中的某个地方。