什么时候向前声明还不够?

-10 c++ overloading class definition incomplete-type

#include问题

class widget { };

class fubar : public widget { // 1

    void value_parameter(widget); // 2    
    void ref_parameter(widget &); // 3
    void ptr_parameter(widget *); // 4

    virtual void value_parameter(widget); // 5
    virtual void ref_parameter(widget &); // 6
    virtual void ptr_parameter(widget *); // 7

    widget value_return(); // 8
    widget & ref_return(); // 9
    widget * ptr_return(); // 10

    widget instance_value_member; // 11
    widget & instance_ref_member; // 12
    widget * instance_ptr_member; // 13

    static widget static_value_member; // 14
    static widget & static_ref_member; // 15
    static widget * static_ptr_member; // 16
};
Run Code Online (Sandbox Code Playgroud)

哪些行需要包含?(#include "widget.hpp"

Jar*_*d42 5

Widget需要以下项的完整定义:

  • #1class fubar : public widget),我们需要基类定义。
  • #11widget instance_value_member;),我们需要成员定义。

向前声明对于其他声明就足够了。

  • [Holy sh!t TIL](http://coliru.stacked-crooked.com/a/6cd948992e7f8435) (3认同)