为什么static变量要在cpp文件中定义?
这两天做项目发现如果在类的头文件中定义static 变量,多个包含头文件的cpp文件会链接错误,提示重定义。
static如果定义在文件中,它的作用域是当前文件
在其他文件中是不可见的,也就是说如果头文件A.h中定义了一个变量static int a = 100,然后cpp文件A01.cpp和A02.cpp都包含了A.h.那么两个cpp中的a的地址是不同的。可以正常编译通过。
按理来说#include<>命令指示简单的将 .h 的内容拷贝过来,即使类中的变量同名,那么也是互不可见的呀?·
华丽的分割线
命名空间可以跨多个文件
正如多个标准库文件中都定义了namespace std 命名空间,他们是同一个命名空间
类名也是一个命名空间
所以不同的cpp文件包含同一个.h文件的话,如果在.h文件中定义static变量,则在同一关命名空间中定义多次。