我有一个具有这样代码的头文件
namespace A{
static int B;
}
我有一个单独的cpp文件来定义B;
int A::B = 10;
然后我还有一个包含头文件的cpp文件,但是它会导致重新定义错误,我认为这很奇怪,因为我没有在头文件中定义任何内容。怎么了?
答案 0 :(得分:2)
行
static int B;
是定义和声明。该定义是文件范围的,不是全局的。编译仅包含以下代码块的.cpp文件时,会看到相同的错误。
namespace A {
static int B;
}
int A::B = 10;
int main() {}
从使用情况来看,您应该使用extern
,而不是static
。
namespace A {
extern int B;
}