如果我在不同的标题中有两个类:
第一个标题:
include "second_header.h"
class A
{
int x;
};
第二个:
include "first_header.h"
class A;
class B
{
A a;
};
为什么编译器给我一个未定义类的错误,我能解释一下吗?
如果我在不同的标题中有两个类:
第一个标题:
include "second_header.h"
class A
{
int x;
};
第二个:
include "first_header.h"
class A;
class B
{
A a;
};
为什么编译器给我一个未定义类的错误,我能解释一下吗?
因为在second_header.h
类A
中实际上并没有被定义,只是被声明了。并且要使用类的非引用/非指针,它需要被完全定义。
由于您不需要 in 中的second_header.h
文件first_header.h
,只需从文件中删除该包含first_header.h
。
您要求编译器递归地包含标头。您不需要在第一个标题中包含第二个标题,请尝试删除该包含。
作为一条规则,你应该总是在你的 C++ 头文件中使用包含保护。
如果您实际使用 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.
};