请看一下这个简单的类:
class TernaryPolynomial;
class IntegerPolynomial;
class DenseTernaryPolynomial:public IntegerPolynomial,public TernaryPolynomial
{
public:
DenseTernaryPolynomial();
static DenseTernaryPolynomial generateRandom(int,int,int);
};
您能否解释一下为什么编译器会抱怨TernaryPolynomial必须是先前定义的类或结构?我认为它根本不应该在乎,因为我对该类进行了预先声明。
这是三元多项式类
class Polynomial;
class IntegerPolynomial;
class TernaryPolynomial:public Polynomial
{
public:
TernaryPolynomial();
virtual ~TernaryPolynomial();
virtual IntegerPolynomial toIntegerPolynomial() = 0;
};
最佳答案
对于派生,前向声明是不够的,您需要包括完整的类定义。
仅当您将指针或对该类的引用定义为成员或方法参数时,才可以使用前向声明。一旦真正开始使用事物(通过引用,通过引用访问成员或例如进行派生),您就需要包括整个类定义。