C++中成员对象的指针

为什么会有这样的错误,然后感觉代码段也有点弯弯绕绕,能理解的都打在了注释,其他的可以解释详细一点吗

img

正如编译器的提示所述,编译器只在CA类的前面找到了CB类的声明,但没有找到其定义;
对CA类来说,CB是一个不完整类型(incomplete type),因为没有对其定义;
所以调用一个不完整类型的方法会报错。

如果把CB的定义放在CA的前面,就没有错误了。

#include <iostream>

class CA;

class CB
{
    CA* a;
public:
    void funcA()
    {
        std::cout << "calling CB" << '\n';
    }
};

class CA
{
    CB* b;
public:
    void callCB()
    {
        b->funcA();
    }
};


int main()
{
    CA a;
    a.callCB();
}