即使未在头文件中定义静态变量,重新定义错误?

时间:2018-09-13 04:35:13

标签: c++

我有一个具有这样代码的头文件

namespace A{
    static int B;
}

我有一个单独的cpp文件来定义B;

int A::B = 10;

然后我还有一个包含头文件的cpp文件,但是它会导致重新定义错误,我认为这很奇怪,因为我没有在头文件中定义任何内容。怎么了?

1 个答案:

答案 0 :(得分:2)

static int B;

是定义和声明。该定义是文件范围的,不是全局的。编译仅包含以下代码块的.cpp文件时,会看到相同的错误。

namespace A {
   static int B;
}

int A::B = 10;

int main() {}

从使用情况来看,您应该使用extern,而不是static

namespace A {
   extern int B;
}