当前位置: 技术问答>linux和unix
KDevelop中的全局变量的问题
来源: 互联网 发布时间:2015-05-07
本文导语: 有几个文件 //a.h #ifndef ... #define ... extern int g_iA; .. #endif //a.cpp g_iA=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
g_iA=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
g_iA=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.cpp
>>ing g_iA=0;
这个地方是不允许初始化的,kdevelop不知道什么时候运行此语句,同样,在其他的文件里面这样写也是不行的。
你最好在main()或者底层类的构造函数中进行初始化。
这不是多重定义的问题,kdevelop和vc一样,调试信息可信而不可全信。
>>//a.cpp
>>ing g_iA=0;
这个地方是不允许初始化的,kdevelop不知道什么时候运行此语句,同样,在其他的文件里面这样写也是不行的。
你最好在main()或者底层类的构造函数中进行初始化。
这不是多重定义的问题,kdevelop和vc一样,调试信息可信而不可全信。