当前位置: 技术问答>linux和unix
KDevelop下定义全局变量的问题?
来源: 互联网 发布时间:2015-05-07
本文导语: 有几个文件 //a.h #ifndef ... #define ... extern int g_iA; .. #endif //a.cpp a=0; //b.h #include "a.h" 然后c1.h,c2.h,c3.h都包含b.h,这3个类都是用到了g_iA。 d.h包含c1.h,c2.h,c3.h。 但是系统却报错说g_iA重定义.只要包含了(包括间接包含)...
有几个文件
//a.h
#ifndef ...
#define ...
extern int g_iA;
..
#endif
//a.cpp
a=0;
//b.h
#include "a.h"
然后c1.h,c2.h,c3.h都包含b.h,这3个类都是用到了g_iA。
d.h包含c1.h,c2.h,c3.h。
但是系统却报错说g_iA重定义.只要包含了(包括间接包含)a.h的头文件通通报错说:文件名.moc.cpp,行:multiple definition of 'g_iA'
请问这是怎么回事?
//a.h
#ifndef ...
#define ...
extern int g_iA;
..
#endif
//a.cpp
a=0;
//b.h
#include "a.h"
然后c1.h,c2.h,c3.h都包含b.h,这3个类都是用到了g_iA。
d.h包含c1.h,c2.h,c3.h。
但是系统却报错说g_iA重定义.只要包含了(包括间接包含)a.h的头文件通通报错说:文件名.moc.cpp,行:multiple definition of 'g_iA'
请问这是怎么回事?
|
g++ -E moc.cpp看看有几个g_iA,都是哪里来的。
|
>>错了一点
>>//a.cpp
>>ing g_iA=0;
这个地方是不允许初始化的,kdevelop不知道什么时候运行此语句,同样,在其他的文件里面这样写也是不行的。
你最好在main()或者底层类的构造函数中这样写。
这不是多重定义的问题,kdevelop和vc一样,调试信息可信而不可全信。
>>//a.cpp
>>ing g_iA=0;
这个地方是不允许初始化的,kdevelop不知道什么时候运行此语句,同样,在其他的文件里面这样写也是不行的。
你最好在main()或者底层类的构造函数中这样写。
这不是多重定义的问题,kdevelop和vc一样,调试信息可信而不可全信。
|
to : fierygnu(va_list)
问题是这样的初始化在kdevelop里面是不允许的。要作只有定义申明和初始化都在一起,比如这样:
//**.cpp
int g_nUname=0;
问题是这样的初始化在kdevelop里面是不允许的。要作只有定义申明和初始化都在一起,比如这样:
//**.cpp
int g_nUname=0;