比如过class1用到了class2,class2又用到class1,我直接在各自的头文件里面分别包含class1.h和class2.h,出错;在其中一个里面包含class1.h另一个类的头文件里面写上class class2;报错说class2为未定义类型。帮我解答解答吧,多谢了。

解决方案 »

  1.   

    #include <iostream.h>
    class CCircle;class CPoint
    {
    unsigned x;
    unsigned y;
    bool IsInCircle(CCircle *Circle);
    };class CCircle
    {
    public:
    unsigned Radius;
    CPoint Center;
    };bool CPoint::IsInCircle(CCircle *Circle)
    {
    return ( ((x-Circle->Center.x)*(x-Circle->Center.x)
    +(y-Circle->Center.y)*(y-Circle->Center.y))
    <=Circle->Radius*Circle->Radius );
    }
    void main()
    {
    CPoint Center;
    CPoint Point;
    CCircle Circle;
    Center.x=0;
    Center.y=0;
    Point.x=2;
    Point.y=3;
    Circle.Radius=3;
    Circle.Center=Center;
    if (Point.IsInCircle(&Circle))
    cout<<"The point is in the circle."<<endl;
    else
    cout<<"The Point is not in the circle."<<endl;
    }
      

  2.   

    比如过class1用到了class2,class2又用到class1,我直接在各自的头文件里面分别包含class1.h和class2.h,出错;在其中一个里面包含class1.h另一个类的头文件里面写上class class2;报错说class2为未定义类型。另一个类的头文件里面写上class class2再在cpp文件中包含class2.h
      

  3.   

    在一个类的声明前,提前声明另外一个类。
    // b.h
    class A;
    class B
    {
      class A* a;  ......
    }这样在类A的声明文件中就可以包含类B的声明文件;
    #include "b.h"class A
    {
       .....
    }
      

  4.   

    楼上聪明!!!
    提问的人没有搞懂声明和定义的区别
    实例和指针的不同.
    #include 不能乱放!!
    非常不好编程风格!!!!!!!!!!1
    :)
      

  5.   

    ruihuahan说的是最标准的用法!
      

  6.   

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