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

时间:2011-12-01 19:17:21

标签: c++

假设我创建了一个头文件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中完成相同的操作,我将不会得到错误,链接器将能够与constants.cpp中定义的YEAR链接(不包括这里也是MainCpp.cpp中的constants.cpp。)

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

2 个答案:

答案 0 :(得分:3)

头文件中的声明应该是声明,而不是定义。换句话说,不要在标题中加上“= 2011”。

需要在某处定义此变量,例如main.cpp。不要将extern放在该定义中。

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

答案 1 :(得分:0)

extern告诉编译器在其他地方为其分配了空间。在某个地方必须有一个定义,没有外部。但是在C ++中(与C不同),consts有内部链接,因此你不需要extern。 (见Why does const imply internal linkage in C++, when it doesn't in C?

只需将const int YEAR = 2011;放入您的标题文件中,并将您的标题文件包含在您需要的位置。