比如:
//a.h
class A{
  B* b;}.........
//b.h
class B:public A
{
}

解决方案 »

  1.   

    可以阿,为什么不行呢!你定义的只是指针阿,你只要设置一下extern class B,告诉编译器B是一个类,指针与对象是不同的阿,!
      

  2.   

    可以:
    class CB;
    class CA{
    public:
        CB *m_pB;
        int a;
    };class CB : public CA{
    public:
        int b;
    };int main()
    {
        CB objB;
        CA objA;
        objA.m_pB = &objB;
        objA.m_pB->b = 1;
        printf("objB.b is %d", objB.b);    return 0;
    }
      

  3.   

    侯捷老师《深入浅出MFC》中说
    我們得到了3個結論:
    1. 如果你以㆒個「基礎類別之指標」指向「衍生類別之物件」,那麼經由該指標你只能夠呼叫基礎類別所定義的函式。
    雖然我們可以令pBase 實際指向CDerived 物件,
    卻因為pBase 的型態("一個CBase* 指標")
    使它只能夠呼叫BaseFunc(),不能夠呼叫DeriFunc()。
    ////////////如果从基类指向派生类只能调用基类的函数
    2. 如果你以㆒個「衍生類別之指標」指向㆒個「基礎類別之物件」,你必須先做明顯的轉型動作(explicit cast)。這種作法很危險,不符合真實生活經驗,在程式設計也會帶給程式員困惑。
    ///////////如果从派生来指向基类,《《《這種作法很危險》》》
    3. 如果基礎類別和衍生類別都定義了「相同名稱之成員函式」,那麼透過物件指標呼叫成員函式時,到底呼叫到哪㆒個函式,必須視該指標的原始型別而定,而不是視指標實際所指之物件的型別而定。這與第1 點其實意義相通。
      

  4.   

    这样就可以了:
    //a.h
    class B;
    class A{
      B* b;
    }//b.h
    #include "a.h"
    class B:public A
    {
      int x;
    }
      

  5.   

    我也觉得逻辑上过不去,但是如果这样
    //a.h
    class A{
      void* b;}.........
    //b.h
    class B:public A
    {
    }.......
    A a;
    B d;
    a.b 
      

  6.   

    楼上 HowUCan(上下班别忘刷卡)  说的没错。
    可以这样用://a.h
    class B;
    class A{
      B* b;}.........
    //b.h
    class B:public A
    {
    }这种技术在我研究过的一个脚本解释器中用得很多。
    我想说的是,c++的东西,用得当,其乐无穷。
      

  7.   

    其实我现在遇到的情况是这样的
    ////a.h
    class A{}
    .......
    //b.h
    class B:public vector<A*>
    {}
    ///
    现在A中必须有一个指向B的指针,或者重新定义一个class,把这2个class包起来。
    根据一个老外的java程序写相应的C++程序,写着写着就成这样了
      

  8.   

    注意要添加一行:
    class B;
    对于指针变量来说,他占用的空间大小是固定的,
    你定义的只是一个声明。
    如果你不使用 B 的成员变量和成员函数,则不用包含类定义。
      

  9.   

    其实我现在遇到的情况是这样的
    ////a.h
    class A{}
    .......
    //b.h
    class B:public vector<A*>
    {}
    ///
    现在A中必须有一个指向B的指针,或者重新定义一个class,把这2个class包起来。
    根据一个老外的java程序写相应的C++程序,写着写着就成这样了