请看这个简单的类:
class TernaryPolynomial;
class IntegerPolynomial;
class DenseTernaryPolynomial:public IntegerPolynomial,public TernaryPolynomial
{
public:
DenseTernaryPolynomial();
static DenseTernaryPolynomial generateRandom(int,int,int);
};
您能解释一下为什么编译器会提示 TernaryPolynomial 必须是先前定义的类或结构吗?我认为它根本不应该关心,因为我提出了该类(class)的前向声明(forward declaration)。 这是 TernaryPolynomial 类
class Polynomial;
class IntegerPolynomial;
class TernaryPolynomial:public Polynomial
{
public:
TernaryPolynomial();
virtual ~TernaryPolynomial();
virtual IntegerPolynomial toIntegerPolynomial() = 0;
};
最佳答案
对于派生,前向声明是不够的,您需要包含完整的类定义。
前向声明只能在将类的指针或引用定义为成员或方法参数时使用。一旦您真正开始使用事物(例如,通过取消引用、通过引用访问成员或派生),您就需要包括整个类定义。
关于c++ - "class name"必须是以前定义的类或结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8810715/