我使用以下简单文件重现错误。
它说:
字段的类型“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);}
Member foo_不能是引用或指针。原因是在我的实际代码中,我无法在Bar的初始化列表中初始化Foo。
你的问题可以简化为:
class Foo;
class Bar{
Foo foo_; // error: incomplete type
};
这里你做了一个类型的前向声明Foo
,即没有完整定义的声明:在 C++ 中这足以声明一个指针,但不能像您在Bar
.
要么给你的类一个完整的定义:
class Foo{
// put details here
};
class Bar{
Foo foo_; // OK
};
或者使用(智能)指针,例如:
class Foo;
class Bar{
std::unique_ptr<Foo> foo_; // OK
};
或更改订单声明,如所示巴泰克·巴纳切维奇 https://stackoverflow.com/a/44388605/6612932.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)