"类名"必须是先前定义的类或结构

And*_*kha 0 c++ inheritance

请看这个简单的课程:

class TernaryPolynomial;
class IntegerPolynomial;

class DenseTernaryPolynomial:public IntegerPolynomial,public TernaryPolynomial
{
 public:
 DenseTernaryPolynomial();
static DenseTernaryPolynomial generateRandom(int,int,int);
};
Run Code Online (Sandbox Code Playgroud)

你能解释一下,为什么编译器会抱怨TernaryPolynomial必须是以前定义的类或结构?我认为它根本不应该关心,因为我提出了该类的前瞻声明.这是TernaryPolynomial类

class Polynomial;
class IntegerPolynomial;

class TernaryPolynomial:public Polynomial
{
 public:
 TernaryPolynomial();
 virtual ~TernaryPolynomial();
 virtual IntegerPolynomial toIntegerPolynomial() = 0;
 };
Run Code Online (Sandbox Code Playgroud)

jde*_*aan 7

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

只有在将指针或对类的引用定义为成员或方法参数时,才能使用前向声明.一旦你真正开始使用东西(通过解除引用,通过引用访问成员或派生例子),你需要包括整个类定义.