链接头文件中的常量变量定义
Linking with constant variable definition in a header file
假设我创建了一个头文件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;
在你的头文件,包括你的头文件,无论你需要它。
相关文章:
- 通过多个头文件使用常量变量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 非常量变量只读位置的赋值
- 使用大量已知常量变量的正确方法
- 无法在具有常量变量大小的类中创建堆栈分配数组
- 这些语句是否等效(静态变量、常量变量和泛型)
- 包含常量变量并包含在多个文件中的标头的链接错误
- 我们如何修改常量变量的值
- 如何在模板类中设置静态常量变量
- 为什么常量变量是模板特殊化所必需的,而不是常量
- 如何在函数中传递常量变量?
- 定义常量变量的最佳方法
- C++ 声明常量变量,但推迟其初始化?
- 如何初始化具有常量变量的结构数组
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 使用指针 c++ 更改常量变量
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 为什么 lambda 对象中的局部变量是常量变量?
- 使用常量变量作为数组的大小
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?