请看一下这个简单的类:

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;
 };

最佳答案

对于派生,前向声明是不够的,您需要包括完整的类定义。

仅当您将指针或对该类的引用定义为成员或方法参数时,才可以使用前向声明。一旦真正开始使用事物(通过引用,通过引用访问成员或例如进行派生),您就需要包括整个类定义。

10-06 12:42