在file.h中:
extern const int ONE;
Run Code Online (Sandbox Code Playgroud)
在file.cpp中
#include "file.h"
const int ONE = 1;
Run Code Online (Sandbox Code Playgroud)
在main.cpp中
#include <iostream>
#include "file.h"
int main()
{
std::cout << ONE << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
问题:为什么我必须#include "file.h"在file.cpp中使用?有一个定义ONE.
谢谢
默认情况下,声明的变量const具有内部链接,就像它们也被声明一样static.如果你包含标题,那么extern声明将给它外部链接,一切都会好的.否则,其他翻译单元无法提供该定义.
您可以通过添加extern到定义来避免包含标题; 但最好还是包含标题,这样编译器就可以检查这两个声明是否兼容.
更好的方法是在标题中用内部链接定义它,
const int ONE = 1;
Run Code Online (Sandbox Code Playgroud)
在源文件中没有定义; 然后它的值可用作常量表达式.