在头文件中使用const

Sim*_*kov 4 c++ const header

在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.

谢谢

Mik*_*our 7

默认情况下,声明的变量const具有内部链接,就像它们也被声明一样static.如果你包含标题,那么extern声明将给它外部链接,一切都会好的.否则,其他翻译单元无法提供该定义.

您可以通过添加extern到定义来避免包含标题; 但最好还是包含标题,这样编译器就可以检查这两个声明是否兼容.

更好的方法是在标题中用内部链接定义它,

const int ONE = 1;
Run Code Online (Sandbox Code Playgroud)

在源文件中没有定义; 然后它的值可用作常量表达式.