C++循环引用,使用方法时出错,甚至在前向声明之后

Seg*_*ult 1 c++ compiler-errors forward-declaration circular-reference

假设我有:

class B;
class A{
    private:
        B *b;
    public:
        bar(){ b->foo()};
        foo();
}

class B{
    private:
        A *a;
    public:
        bar(){ a->foo();}
        foo();
}
Run Code Online (Sandbox Code Playgroud)

编译时,这个文件给出了一个

错误"无效使用不完整类型struct B",

即使我已经向前声明了B类.据我所知,这是因为当我调用函数foo()b,编译器仍然不知道存在这样的函数.我怎么解决这个问题?

Luc*_*ore 10

前向声明不提供实现细节.除了它存在的事实之外,我们B不知道A.

要解决此问题,请将声明与实现分开.

您还缺少方法的返回类型.

文件啊:

class B;
class A{
    private:
        B *b;
    public:
        void bar();
        void foo();
};
Run Code Online (Sandbox Code Playgroud)

文件A.cpp:

#include "A.h"
#include "B.h"
void A::bar(){ 
   b->foo();
}
Run Code Online (Sandbox Code Playgroud)

文件Bh:

class A;
class B{
    private:
        A *a;
    public:
        void bar();
        void foo();
};
Run Code Online (Sandbox Code Playgroud)

文件B.cpp:

#include "B.h"
#include "A.h"
void B::bar(){ 
   a->foo();
}
Run Code Online (Sandbox Code Playgroud)