:
extern const int ONE;
在file.cpp
中#include "file.h"
const int ONE = 1;
和main.cpp
#include <iostream>
#include "file.h"
int main()
{
std::cout << ONE << std::endl;
}
问题:为什么我必须在file.cpp中使用#include "file.h"
?有ONE
的定义。
由于
答案 0 :(得分:7)
默认情况下,声明为const
的变量具有内部链接,就好像它们也被声明为static
一样。如果你包含标题,那么extern
声明会给它外部链接,一切都会好的。否则,其他翻译单元无法提供该定义。
您可以通过在定义中添加extern
来避免包含标头;但最好还是包含标题,这样编译器就可以检查这两个声明是否兼容。
最好还是在标题中用内部链接定义它,
const int ONE = 1;
源文件中没有定义;然后它的值可用作常量表达式。
答案 1 :(得分:3)
有一个定义。
定义,是的。但是在file.cpp
中包含头文件的重要一点是它提供了ONE
的不同声明 - 即标记为extern
的声明。这可以防止随后定义的ONE
常量具有内部链接,从而不会被导出。
为了使ONE
的定义(位于单独的编译单元中)对main.cpp
可见,ONE
的链接不得为内部。