C++ 为什么在类上方指定其他类名?

C++ 为什么在类上方指定其他类名?,c++,class,C++,Class,可能重复: 在特定类之上指定其他类名有什么用 class A; class B; class C { ... ... }; 这是一个好主意 作为C的后遗症,C++编译器是以上下的方式工作(或多或少)。如果希望类C以某种方式(通过指针或引用)引用类A或类B,那么编译器必须事先知道它们的存在 被称为。它允许您声明指向该类型的指针,而不包括其定义。当然,就编译器而言,由于此时不存在定义,因此只能声明类型的指针或引用,因为编译器不知道如何构造所述类型的对象,即。,它无法确定其大小。这称为前向声

可能重复:

在特定类之上指定其他类名有什么用

class A;
class B;

class C
{
 ...
 ...
};
这是一个好主意

作为C的后遗症,C++编译器是以上下的方式工作(或多或少)。如果希望类

C
以某种方式(通过指针或引用)引用类
A
或类
B
,那么编译器必须事先知道它们的存在


被称为。它允许您声明指向该类型的指针,而不包括其定义。当然,就编译器而言,由于此时不存在定义,因此只能声明类型的指针或引用,因为编译器不知道如何构造所述类型的对象,即。,它无法确定其大小。

这称为前向声明,允许在定义的类的原型中使用这些类。

通过这样的前向声明类,您告诉编译器类存在,不用担心,稍后将链接它们


这不是包含完整定义的头文件,如果编译器不需要知道类的外观,这就足够了。例如,如果您仅使用指针引用当前文件中的类。

在这种情况下如何<代码>A类;类B{func(A);}所以在本例中,我不需要包含定义类A的头文件,只需向前声明A?否,在这种情况下,您只能声明一个指向
a
的指针或引用。这不仅仅是C的遗留问题。如果不是这样,编译器将不得不记住每个未声明的用法,并在编译结束时返回到它,如果在此之前没有声明名称。这将减慢编译时间。另一种方法是多次解析代码,这也意味着速度大大减慢。@Nobody:的确如此。但其他语言(Java等)对此处理得非常好。当然,C++中的情况更复杂,我不是java专家,但据我所知,它是用字节码解释的,所以解释器只需要在执行时需要的信息,在那里需要的每个库都被加载,或者如果名字不知道,就会抛出错误。它解释了在使用前向声明时可以做什么和不能做什么。