链接头文件中的常量变量定义

Linking with constant variable definition in a header file

本文关键字:常量 变量 定义 文件 链接      更新时间:2023-10-16

假设我创建了一个头文件constants.h,其中包含:

extern const int YEAR = 2011; // definition

如果我尝试在一个cpp文件(MainCPP.cpp)中使用这个常量,但没有定义它,也没有包括constants.h文件,如下所示:

extern const int YEAR; // declaration
int main() {
    cout << YEAR << endl;
}

当我尝试这样做时,我得到:无法解析的外部符号"int const YEAR"。另一方面,如果我把YEAR的定义放在constant.cpp文件中,并在MainCpp.cpp中做同样的事情,我将不会得到错误,链接器将能够链接到constant.cpp中定义的YEAR(不包括MainCpp.cpp中的constants.cpp)。

这是否意味着链接器可以链接源文件代码,但不能链接头文件代码,除非您显式地包含头文件。

头文件中的声明应该是声明,而不是定义。换句话说,不要在页眉中加上"= 2011"。

这个变量需要在某处定义,比如main.cpp。不要把extern放在那个定义中。

最后,如果您想在运行时为变量赋值,则不能使用const限定符声明它。

extern告诉编译器在其他地方为它分配了空间。在某个地方肯定有它的定义,没有外部的。但是在c++中(与C不同),const有内部链接,所以你不需要在它上面加extern。(参见为什么在c++中const暗示了内部链接,而在C中却没有't ?)

只要把const int YEAR = 2011;在你的头文件,包括你的头文件,无论你需要它。