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

C++ 重新定义错误,即使头文件中未定义静态变量?,c++,C++,我有一个头文件,它的代码如下 namespace A{ static int B; } 我有一个单独的cpp文件来定义B int A::B = 10; 然后我有另一个包含头文件的cpp文件,但它会导致重新定义错误,我认为这很奇怪,因为我没有在头文件中定义任何内容。怎么了?线路 static int B; 是一个定义,也是一个声明。定义是文件范围的,而不是全局的。编译只包含以下代码块的.cpp文件时,您将看到相同的错误 namespace A { static int B; }

我有一个头文件,它的代码如下

namespace A{
    static int B;
}
我有一个单独的cpp文件来定义B

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

线路

static int B;
是一个定义,也是一个声明。定义是文件范围的,而不是全局的。编译只包含以下代码块的.cpp文件时,您将看到相同的错误

namespace A {
   static int B;
}

int A::B = 10;

int main() {}
根据您的用法判断,您应该使用
extern
,而不是
static

namespace A {
   extern int B;
}

static
不是你想象的那样。你要找的是
extern
静态intb是如何定义的?是不是因为B没有封装在类中?