【问题标题】:Inheriting struct which is forward declared?继承前向声明的结构?
【发布时间】:2012-06-20 21:56:32
【问题描述】:

我不能从仅前向声明的结构继承吗?

例子:

struct A;
class B : public A {};

我收到错误“基类未定义”。

你能帮我解决这个问题吗?

谢谢

【问题讨论】:

    标签: c++ inheritance forward-declaration


    【解决方案1】:

    你不能这样做。首先,当你从一个结构或类继承时,它的大小必须是已知的。但是如果结构只是前向声明,编译器就无法确定大小。并且编译器还需要知道超类有哪些类型的成员,例如如果有virtual函数等。

    【讨论】:

    • 实际上类型必须是完整的。为了确定有效的类布局、成员初始化、构造函数的虚拟性、重复基的虚拟性、名称隐藏/歧义等,需要知道的不仅仅是大小。需要整个类声明
    • @sehe 同意,大小只是需要知道的一件事。例如,您如何知道某个方法是否覆盖了虚拟基类方法?
    【解决方案2】:

    当您从类派生时,您必须实际包含基类标头。前向声明是不够的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      相关资源
      最近更新 更多