我在文件1中有类1,文件2中有类2。
如果不在类1中包含类2.h就不能在类1中声明类2的变量。
如果不在类2中包含类1.h就不能在类2中声明类1的变量。现在即要在类1中声明类2的变量,也要在类2中声明类1的变量,这样都包含就产生了无限递归包含了!怎么办?能不能有一种方法可以让我在整个项目中都不用包含就知道这个类的存在呢?
以前也应该有类似的文章吧,谢谢了。

解决方案 »

  1.   

    class B;class A
    {
      B * m_pB;
    };class B
    {
      A mA;
    }关键有两点:其中的一个类需要提前声明(forward declaration); 
    被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class A定义中只能声明class B的指针(或引用)。 
    在类的定义结束(编译器在遇到类定义的右花括号之后),用该类来声明类实例对象,或对象指针,引用都是合法的。如上面的类B中定义类A的实例对象就是正确的,因为在此前类A的定义已结束.反之在A中声明B的对象实例就是错误的.
     
      

  2.   

    看看这里
    http://www.vckbase.com/bbs/prime/viewprime.asp?id=431
      

  3.   

    谢谢.
    加分.
    但是我的是文件问题呀,我也不知道那个文件被先调用,那个文件后被调用,而且这两个文件还是平等的.
    帮我解决包含问题怎么做?
    你不会让我到文件1中"class 类2"吧?我只是想用包含的方法.
      

  4.   

    a.h中
    class b;//提前说明a.cpp中
    #include "b.h"b.h中
    #include "a.h"
      

  5.   

    如果你不想提前声明,使用全局变量试试
         由于全局变量可以避免超前引用,不用赘述。我的习惯是,把类对象的extern语句加在该类头文件的最后,大家喜欢怎样写那都没有什么大问题,关键是保证不要在头文件中胡乱包含。
      

  6.   

    file1:class c2;
    class c1{
      c2 *m_p;
      ...
    };file2:#include "file1"
    class c2{
      ...
    };这样就类重定义错误了。
      

  7.   

    预编译头文件stdafx.h能不能帮我的忙呢?
      

  8.   

    这样试一下,用条件编译://file1.h
    #ifndef  __file1_h__
      //fiel1.h 的所有代码
         .............
    #define  __file1_h__
    #endif
    ____________________________________________________________//file2.h
    #ifndef  __file2_h__
      //fiel2.h 的所有代码
         .............
    #define  __file2_h__
    #endif
    ____________________________________________________________//file1.cpp
    #ifndef  __file2_h__
    #include "file2.h"
    #endif
          .............
    _____________________________________________________________
    //file2.cpp
    #ifndef  __file1_h__
    #include "file1.h"
    #endif
          .............
    _____________________________________________________________