【发布时间】:2017-11-07 09:09:18
【问题描述】:
我使用以下简单文件重现错误。
上面写着:
字段的类型“Foo”不完整
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。
【问题讨论】:
-
要声明一个类的instance,需要类的完整定义。另一方面,要声明引用,只需要前向声明即可。我建议你试验一下你的类和成员函数定义的顺序。
-
我无法在 Bar 的初始化列表中初始化 Foo。 那么你无法在
Bar中创建Foo的实际实例。