我知道在 C++ 中为成员变量递归定义类型的问题:
#include "B.h"
class A
{
B b;
};
#include "A.h"
class B
{
A b;
};
编译器对此抱怨,因为不可能以这种递归方式分配内存。
我不明白的是,这似乎也适用于函数定义:
#include "B.h"
class A
{
B foo();
};
#include "A.h"
class B
{
A bar();
};
编译器给出了同样的错误:
error: ‘A’ does not name a type
error: ‘B’ does not name a type
这是为什么?编译器需要为返回类型保留空间对我来说没有意义。我应该用指针和前向声明解决这个问题吗?根据我的经验(来自 Java),程序员使用这些递归定义来设计软件是很常见的。在 C++ 中似乎很难实现这一点。