出错代码如下:class A
{
public:
    A();
    virtual ~A();
    virtual void Evaluate(D& ref);
};
class B : public A
{
public:
    B();
    virtual ~B();
    void Evaluate(D& ref){...}
};class D
{
public:
    D();
    virtual ~D();
    Assign(B& ref){...}
};请问大家怎么回事,折磨我一下午了,总说没有定义A这个基类

解决方案 »

  1.   

    class D //加一行声明class A
    {
    public:
        A();
        virtual ~A();
        virtual void Evaluate(D& ref);
    };
    class B : public A
    {
    public:
        B();
        virtual ~B();
        void Evaluate(D& ref){...}
    };class D
    {
    public:
        D();
        virtual ~D();
        Assign(B& ref){...}         //这行是什么意思?
    };
    可以编译通过啊???
      

  2.   

    在class A定义之前先作一下声明:class D;
      

  3.   

    我按照前面兄台的说法加上D类的声明果然好用,谢谢大家。但是我发现用#include "D.h"就出现我刚开始的问题,用class D声明的方法就没有问题,这是怎么回事?
      

  4.   

    靠,你在D的方法中用到了B类,而B是从A类派生的,在D类并没有定义A当然会报错了
      

  5.   

    在A 中是用了D, 但是D在A后面定义,编译器在解析A的时候无法找到D,就会报错,在A前面提前声明了D(不是定义),就没有问题.不过你的D和A没有继承关系,直接把D放在A前面就行了,不用提前申明.