c++ - "class name"必须是以前定义的类或结构

标签 c++ inheritance

请看这个简单的类:

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/

相关文章:

c++ - 正确的包含顺序是什么

以元组作为模板参数的 C++ 可变参数模板

javascript - Google App Script 中的子类和继承

java - 为什么 @OneToMany 不适用于 Hibernate 中的继承

c++ - g++ 与 Visual Studio

c++ - VS2010 中未解析的外部符号

c++ ceil() in stooge sort 不工作

inheritance - 在 Rust 1.3 中继承结构的最佳方式是什么?

c++ - 具有多个签名的函数,尝试调用私有(private)子类而不是更通用的函数

python - 为什么在这种情况下从 namedtuple 继承会导致无限递归?