Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试模式链接因标头中未签名的int初始化而失败_C++_Linker_Linker Errors - Fatal编程技术网

C++ 调试模式链接因标头中未签名的int初始化而失败

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 =

据我所知,所有整数类型都可以在头文件中初始化。 这就是为什么我觉得这种声明在我的一个标题中是正确的(我们称之为foo.h):

在发布模式下编译和链接时,它起作用了。 但是,当我在调试模式下编译代码时,出现了以下错误:

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;