我有一个名为foo
的命名空间,其中包含一个整数变量bar
,在foo.h
中声明。
namespace foo {
int bar;
}
如果我只在一个文件中包含foo.h
,那么这个方法完美地运行。但是当我从两个或多个文件中包含foo.h
时,就会出现链接器错误。我发现如果我将bar
声明为static
,我就可以在多个文件中包含foo.h
。这对我来说很奇怪,因为我不知道在命名空间中可以声明静态变量(这是什么意思?)。
这是为什么?更重要的是,为什么没有使用static
会导致错误?在namespace
中使用static
时有什么含义?
File.h
的内容替换了#include "File.h"
后,任何C++文件中都不再显示头文件了。编译器如何知道为多个文件创建静态变量?(第一个文件将包含内容,但是包含保护防止其他文件获取它吗?) - Ben Butterworth