c++ - 模板基类可以存储指向派生而不是对象的指针——为什么?

标签 c++ templates

我有以下代码,我想知道为什么我要更改

T*e;

线到

我;

它抛出一个错误:“Base1::e”使用未定义的类“Derived”

template<class T> class Base1
{
public:
  Base1() {};
  virtual ~Base1() {};

  T* e;
};

class Base2
{
  public:
  Base2() {};
};

class Derived : public Base1<Derived>, Base2
{
  public:
  Derived() {};
  ~Derived() {};
};

最佳答案

一方面,在您指定 Derived 的位置继承自 Base1<Derived>你的Derived类尚未完全定义(也称为不完整类型),因此编译器无法在 Base1 中实例化它.这就是您收到此特定错误消息的原因。

但即使编译器可以实例化一个 Derived到那时,会发生什么? Base1<Derived>将包含 Derived继承自 Base1<Derived>其中包含 Derived它继承了……无穷无尽。显然这是无效的。

关于c++ - 模板基类可以存储指向派生而不是对象的指针——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982624/

相关文章:

c++ - 重载运算符 - () 作为自由函数而不是成员函数的意义?

c++ - 如何修复艺术ascii,我点击一个字母没问题,但输入一个阶段艺术结果错误

c++ - 如何检测窗口已经最大化?

c++ - 是否有可能在 C++ 中获取类型别名的名称?

php - 在没有 Eval 的情况下在字符串中执行 PHP 代码

c++ - 在 C++ 异常的 what() 中构建字符串

c++ - 根据构造函数参数推导模板类型

c++ - 包括 .cpp 文件?

c++ - 成员函数的模板类和类型返回类型

c++ - 构建模板类型的编译时列表?