两个.h文件中的同名static变量:redefinition error!解决思路

两个.h文件中的同名static变量:redefinition error!
我在两个头文件中分别定义两个用static修饰的同名变量:

a.h
static int g_test;

b.h
static int g_test;

main.cpp
#include "a.h"
#include "b.h"


编译main.cpp时还是提示redefinition错误!

不是说static修饰的变量,其作用域限制在当前文件中吗?
上面的重定义的错误是为什么啊?

------解决方案--------------------
探讨
我在两个头文件中分别定义两个用static修饰的同名变量:

a.h
static int g_test;

b.h
static int g_test;

main.cpp
#include "a.h"
#include "b.h"


编译main.cpp时还是提示redefinition错误!

不是说static修饰的变量,其作用域限制在当前文件中吗?
上面的重定义的错误是为什么啊?

------解决方案--------------------
#include 是包含,头文件不单独编译

static修饰的变量,其作用域限制在当前文件,意思是两个.o文件,也就是cpp文件编译后各自一个.o文件
------解决方案--------------------
所谓的作用域限制是指源文件而不是头文件
------解决方案--------------------
定义你自己的名称空间 将它放进去。
------解决方案--------------------
#include 是编译前把头文件copy到指定的位置。
按lz的例子,两个变量的作用域是一样的,肯定编译不过。
如果这样就可以了。

if(条件)
{
#include "a.h" 
}
else
{
#include "b.h" 
}

或者这样
#ifdef AH
#include "a.h" 
#else
#include "b.h" 
#endif
------解决方案--------------------
把 static int g_test; 改个名,一个头文件里一个.

------解决方案--------------------
切忌:定义变量绝对不能放在头文件中,而是应该放在cpp文件中!!这是原则。

头文件中只能放一些
C/C++ code
#include ......
#define .....
#ifdef ....
extern int xxxx;

------解决方案--------------------
定义一定要放在c文件里面

只有类型(如类和结构体)的定义和申明才能放在h文件中,
inline的函数定义也可以放在.h文件中,其它定义一定只能放在C中

这虽然不是绝对必须的规则,但是要写规范的问题少的c/c++,必须这样做
------解决方案--------------------
探讨
谢谢楼上的解释!
我基本上明白了。。。

这里的方案似乎只能包含一个文件,
但我需要两个文件都包含,
这样的实现应该不能满足需求吧。。。

引用:
#include 是编译前把头文件copy到指定的位置。
按lz的例子,两个变量的作用域是一样的,肯定编译不过。
如果这样就可以了。

if(条件)
{
    #include "a.h"
}
else
{
    #include "b.h"
}

或者这样
#ifdef AH
    #include "a.h"
#else
    #include "b.h"
#endif