我有两节课,foo
and bar
.
foo.h #include
s bar.h 并包含一个std::vector
的指针bar
对象。在运行时的某个时刻,bar
必须访问这个指向其他指针的向量bar
对象。所以,foo
包含一个名为getBarObjects()
返回指针数组。
因此,我谨此声明foo
在 bar.h 中。我显然还必须转发声明我正在使用的方法 -foo::getBarObjects()
。因为这将返回指针数组bar
,我就陷入了恶性循环。
我无法转发声明栏,然后简单地转发声明getBarObjects()
,因为这会导致“不允许不完整的类型名称”。
foo.h:
#include "bar.h"
#include <vector>
class foo {
public:
foo();
~foo();
std::vector<bar*> getBarObjects();
private:
std::vector<bar*> barObjects;
}
bar.h:
class foo;
std::vector<bar*> foo::getBarObjects(); // error, doesn't know bar at this point
class bar {
public:
bar(foo *currentFoo);
~bar();
bool dosth();
private:
foo *thisFoo;
}
bar.cpp:
#include "bar.h"
bool bar(foo *currentFoo) {
thisFoo = currentFoo;
}
bool bar::dosth() {
thisFoo->getBarObjects(); // error, pointer to inomplete class type is not allowed
}
如果我只是以相反的方式包含,我也会遇到同样的问题foo
稍后的。有什么建议么?
您无法转发声明成员。
反而,bar.cpp
should #include
both foo.h
and bar.h
。问题解决了。
一般来说,如果您使用以下序列:
一切都会好起来的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)