参考wizard生成的类的头文件的防多include的方法

解决方案 »

  1.   

    这就重定义了。
    你把include 语句放在各自的.cpp文件头,不要放在.h内。
      

  2.   

    有什么地方需要这种互相include的?为什么你不能使用回调函数或者消息映射?
      

  3.   

    错误方法:
    // a.h  class A#include "b.h"class A{
      ....
      B* m_b;
    }// b.h class B#include "a.h"class B{
      ....
      A* m_a;
    }正确的方法为:
    // a.cpp#include "a.h"
    #include "b.h".......// a.h class Aclass B;  // !!!!
    class A{
      ....
      B* m_b;
    }// b.cpp
    #include "a.h"
    #include "b.h"............
    // b.h  class Bclass A;    // !!!!111
    class B{
      ......
      A* m_a;
    }
      

  4.   

    互相添加成员变量时需要include
      

  5.   

    自包含了,编译当然通不过。
    解决方法可以这样
    原来在CMySocket类中加入一个CTalkDlg类的成员变量,MySocket.h 中有#include<TalkDlg.h>,改为:在CMySocket类中加入一个CWnd类的成员变量,MySocket.cpp 中加入#include<TalkDlg.h>,使用的时候进行一次强制类型转换就可以了,另外注释掉MySocket.h 中的#include<TalkDlg.h>语句
      

  6.   

    不可以互相 include!!!!
    必须用我上面的方法!!!!!!!!!
      

  7.   

    在头文件中有
    #ifundefine......
    #define..........语句,这是为了防止重复包含,所以你在takldlg.h中包含是没有用的,被编译器忽略了![email protected]
    [email protected]
      

  8.   

    那到底该用哪种方法?
    另外
    b.h里的
    Class A
    是什么意思?难道要重新定义一遍?
      

  9.   

    class A;  
    说明下面用到的A定义为一个class。
    不用重新定义,只是说明一下而已。注意,是class A; 而不是class A{...};就相当在一个h文件中定义:
    // c.hclass B;class A{
      ....
      B* m_b;
    };class B{
      ....
      A* m_a;
    }这样肯定没问题。
      

  10.   

    交叉定义的问题: verybigbug() 说的对。
      
      

  11.   

    对,使用指针,不要使用实例作为成员变量,因为A包含一个B,B再包含一个A这不是循环了么?
    所以你至少需要将其中一个改为指针。。
      

  12.   

    在写.h文件时用:
    #ifndef XXXX
    #define XXXX
    ...
    ...
    ...
    #endif
    这样就可防止交叉引用了。