C++ 调试模式链接因标头中未签名的int初始化而失败
据我所知,所有整数类型都可以在头文件中初始化。 这就是为什么我觉得这种声明在我的一个标题中是正确的(我们称之为foo.h): 在发布模式下编译和链接时,它起作用了。 但是,当我在调试模式下编译代码时,出现了以下错误:C++ 调试模式链接因标头中未签名的int初始化而失败,c++,linker,linker-errors,C++,Linker,Linker Errors,据我所知,所有整数类型都可以在头文件中初始化。 这就是为什么我觉得这种声明在我的一个标题中是正确的(我们称之为foo.h): 在发布模式下编译和链接时,它起作用了。 但是,当我在调试模式下编译代码时,出现了以下错误: undefined reference to `Bar::Foo::DEFAULT' collect2: ld returned 1 exit status 当我将初始化移动到foo.cpp时,问题得到了解决: const unsigned int Foo::DEFAULT =
undefined reference to `Bar::Foo::DEFAULT'
collect2: ld returned 1 exit status
当我将初始化移动到foo.cpp时,问题得到了解决:
const unsigned int Foo::DEFAULT = 0xffffffff;
但我不明白为什么。有人能猜到吗
(我在Ubuntu上使用GCC4.2.4)您已经初始化了成员,但是没有定义它。您仍然需要
常量unsigned int Foo::DEFAULT代码>在单个实现文件中
在发布版本中,对成员的引用可能会被优化掉(即,用内联值替换,因为您告诉编译器它不会被更改),因此不会查找任何符号。调试并没有那么宽松-编译器现在想知道您的成员已定义并驻留在内存中的某个位置
const unsigned int Foo::DEFAULT = 0xffffffff;