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

问题描述

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

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::,而实际文件的其余部分很可能需要它,则这种情况已经改变。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...