各位高手:
    我在我的project里面定义了一个声明全局变量的头文件(globaldef.h,和globaldef.cpp)其中我在.h文件里面声明一个数组和两个自己定义的类的对象(这些都是要做全局变量的),在别的类要用得这些全局变量我就#include "globaldef.h",意思是多处包含到头文件globaldef.h,而且我在.h文件里面有这样的语句
#ifndef _GLOBALDEF_H_
#define _GLOBALDEF_H_
//定义全局变量……#endif
这样的语句,可是我添加到我的Project的时候,编译提示是这些变量已经被声明过,但是里面的那些比如int 的变量没提示出错,为此我不得不在那些提示错误的变量、对象啊前面加上static ,有哪一位遇到过这种情况吗?能否给我讲讲你的解决方法,这个问题实在是另我头痛啊!

解决方案 »

  1.   

    尽量在.cpp里面包含这个头文件,而不要在.h里面包含它
    比如:存在下面的几个文件,a.h中的一个定义需要使用到globaldef.h中的一个声明
    a.cpp, a.h, globaldef.h, globaldef.cppa.h中最好不include任何东西
    a.cpp中在include a.h之前include globaldef.h
      

  2.   

    变量不要在头文件里面声明,即使有#ifndef #define #endif这样的结构也不行,如果多个文件include这个头文件的话,就会出重复定义的错误。你可以这么做,这几个变量放在cpp文件里面声明,int a;
    而在头文件里面这么写extern int a;这样别的文件包含了这个头文件之后,就可以使用这个a,还不会出上面的错误。
      

  3.   

    还是比较反感在头文件里面extren int a,然后到处包含这个头文件的做法
    声明全局函数,返回指向全局变量的指针比较好
    最好的办法还是不要用全局变量
      

  4.   

    也可以参照1L的方法,在*.cpp中引用#include "globaldef.h"。
    1)如果需要使用globaldef.h中声明的类,那么可以这样在*.h中声明:class globaldef;//假如全局的类名是这样的
    但是只能使用这个类的定义,也就是说,只能定义指针或者引用,不能定义变量。但是可以作为形参。
    2)然后在*.cpp中引用#include "globaldef.h",调用这个指针实际的值就可以了。