我使用以下简单文件重现错误。字段在前向声明中具有不完整类型
它说:
领域具有不完全类型 '富'
bar.h:
class Foo;
class Bar{
private:
int x_;
Foo foo_; // error: incomplete type
public:
void setx(int x) {x_ = x;};
void increment(int);
};
class Foo{
public:
void run(int y,Bar& bar) {bar.setx(y);};
};
void Bar::increment(int i){foo_.run(i,*this);}
会员foo_不能是引用或指针。原因是在我的实际代码中,我无法在Bar的初始化列表中初始化Foo。
要声明一个类的*实例*,需要该类的完整定义。另一方面,为了声明一个参考,一个前向声明就是所需要的。我建议你尝试一下你的类和成员函数定义的顺序。 –
*我无法在Bar的初始化列表中初始化Foo。*然后您无法在Bar中创建'Foo'的实例。 –