两个.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修饰的变量,其作用域限制在当前文件中吗?
上面的重定义的错误是为什么啊?
------解决方案--------------------
------解决方案--------------------
#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文件中!!这是原则。
头文件中只能放一些
我在两个头文件中分别定义两个用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++,必须这样做
------解决方案--------------------