C++包含循环。不能使用前向声明



我想做这样的事情,从main((运行:

主要.cpp

#include "A.h"
#include "B.h"
int main(){
A* a = new A();
B* b = new B(a);
b->render();
return 0;

A.h

class B;
class A {
public:
void renderObject(B* b);
}

A.cpp

#include "A.h"
void renderObject(B* b) {
int* data = b->data;
//do something with data

B.h

class A;
class B {
public:
A* a;
B(A* a);
int* data;
void render();
}

B.cpp

#include "B.h"
B(A* a) {
this->a = a;
//something that write stuff to data.
}
void render() {
a->renderObject(this);
}

这种编码可能吗?我能做些什么让两者都可以参考?

对于A.cpp中的这一行,您需要的不仅仅是;它是一个类";,转发声明提供的信息
也就是说,在这个文件中,您需要一个额外的

#include "B.h"

与B.cpp类似,它需要为包含的代码包含A.h。(谢谢谢夫。(

而且,至少如果只看所显示的代码,你真的不需要在A.cpp中包含A.h。如果你添加了看似缺失的A::,而实际文件的其余部分很可能需要它,这已经改变了。

最新更新