为什么变量需要在头文件中的声明处进行替换,然后在相应的cpp文件中再次声明为:
一种。防止链接错误
ex. header 1.h-
namespace forglobal {
extern int x;
}
source 1.cpp-
namespace forglobal{
int x=6;
}
source 2.cpp-
#include "1.h"
cout<<x; //6
b。在不同的cpp文件中使用时,不能像调用函数ex那样仅使用 namespace 。
header -1.h
namespace forglobal {
int x
}
source -1.cpp {
namespace forglobal {
void change() {
x=5;
}
}
}
source -2.cpp
#include "1.h"
forglobal::change();
cout<<forglobal::x<<'\n'; //5
最佳答案
没有声明extern
的任何命名空间级别的变量声明也是一个定义。也就是说,如果您的 header 带有一个非extern
变量声明(包含在一个以上链接到程序中的翻译单元中),则会得到多个定义。为防止这种情况,请将 header 中的变量声明标记为extern
,并忽略定义所在的extern
。
当然,首先使用全局变量通常不是一个好主意,但这是一个不同的讨论。