在VC中,我定义了一个global.h,它包含了几个结构体和一些常量定义.
但是我用
#ifndef _GLOBAL_H
#define _GLOBAL_H#endif 环绕整个global.h结果有三个类都引用了global.h.
Link的时候, 结构体已经包含在XXX.obj中定义...
为什么会这样?

解决方案 »

  1.   

    我的结构体是这样的:
    struct USERINFO{
        char caUsername[USERNAME_LEN];
        char caMD5pwd[MD5_LEN]; /*md5(password)*/
        char caMACaddr[MAC_LEN];
        char caMD5ip[MD5_LEN];      
    } g_SUserInfo;结果它就说这个结构体 struct USERINFO g_SUserInfo已经在XXX.obj中定义...
      

  2.   

    你在多个CPP文件中都包含了这个H文件每个CPP文件都会编译一个obj所以每个obj文件都会存在这个变量的定义,所以报错。
      

  3.   

    在头文件中 只作定义
    struct USERINFO{
        char caUsername[USERNAME_LEN];
        char caMD5pwd[MD5_LEN]; /*md5(password)*/
        char caMACaddr[MAC_LEN];
        char caMD5ip[MD5_LEN];     
    };在用到的cpp中在去 声明该结构体的变量 g_SUserInfo;否则就会重定义,原因见2楼
      

  4.   

    3楼的方法或在其他几个引用的地方加 extern
      

  5.   

    C++编译是有多少个.cpp编译成多少个.o 或.obj 
    如果为防止重复定义,最好把头文件中所定义的函数,在一个专门的.cpp中实现