0

如果我在不同的标题中有两个类:

第一个标题:

include "second_header.h"
class A
{
   int x;

};

第二个:

include "first_header.h"
class A;
class B
{
   A a;
};

为什么编译器给我一个未定义类的错误,我能解释一下吗?

4

3 回答 3

4

因为在second_header.hA中实际上并没有被定义,只是被声明了。并且要使用类的非引用/非指针,它需要被完全定义。

由于您不需要 in 中的second_header.h文件first_header.h,只需从文件中删除该包含first_header.h

于 2013-09-12T13:48:21.600 回答
3

您要求编译器递归地包含标头。您不需要在第一个标题中包含第二个标题,请尝试删除该包含。

作为一条规则,你应该总是在你的 C++ 头文件中使用包含保护

于 2013-09-12T13:49:00.143 回答
1

如果您实际使用 A 类的对象,则不能使用A 的前向声明class A;。您应该从第二个标题中删除该行,或者
您可以在 B 类中使用指针:

class A; // forward declaration, no need to include A's header.
class B
{
   A* a; // don't create an A object (compiler would need A's header) but an A pointer.
};
于 2013-09-12T13:54:03.833 回答