作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
header.h
int m_linkinfo;
m_linkinfo = 1;
main.cpp
#include "header.h"
int main()
{
return 0;
}
失败,有很多错误。但是,如果我注释了 m_linkinfo = 1;
行,则一切正常。为什么?我不能为头文件中的变量赋值吗?但是如果我把header文件改成只有一行:int m_linkinfo = 1;
,程序就编译成功了!为什么?和上面两行代码有区别吗?
最佳答案
不,你不能。这是一段代码,因此它需要存在于某种函数中,例如:
int main () {
m_linkinfo = 1;
return 0;
}
如您所见,您可以初始化它:
int m_linkinfo = 1;
但是,因为这是标准允许的。
请记住,在头文件中定义通常是有风险的。通过定义,我指的是创建事物的语句,而不是那些简单地通知编译器事物存在(声明)的语句。
这是因为在两个不同的翻译单元中包含 header 会导致同名事物的两个拷贝,如果您随后尝试将它们链接在一起,就会遇到麻烦。
解决这个问题的最好方法是在头文件中声明,例如:
extern int m_linkinfo;
并在非 header (例如 CPP)文件中定义它们:
int m_linkinfo = 1;
这样,每个包含 header 的翻译单元都知道 m_linkinfo
,但只有 CPP 文件创建它。
关于c++ - C++ : Cannot I assign values to a variable in header file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16313174/
我是一名优秀的程序员,十分优秀!