c ++中未定义的类错误

时间:2013-09-12 13:46:54

标签: c++ visual-c++ compiler-construction

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

第一个标题:

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

};

和第二个:

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

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

3 个答案:

答案 0 :(得分:4)

因为在second_header.h中,A类实际上未定义 ,只有声明了。要使用类的非引用/非指针,需要对其进行完全定义。

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

答案 1 :(得分:3)

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

顺便说一下,你应该总是在C ++标题中使用include guards

答案 2 :(得分: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.
};