4
我想知道是否必须在使用该类作为朋友的类中包含“Class1.h”。例如,授予对Class1类的权限的类的.h文件。在朋友的课堂中包含头文件
class Class2 {
friend class Class1;
}
你需要#include“Class1.h”还是没有必要?同样在Class2类中,从不创建或使用Class1对象。 Class1从来没有反过来操纵Class2。
我想知道是否必须在使用该类作为朋友的类中包含“Class1.h”。例如,授予对Class1类的权限的类的.h文件。在朋友的课堂中包含头文件
class Class2 {
friend class Class1;
}
你需要#include“Class1.h”还是没有必要?同样在Class2类中,从不创建或使用Class1对象。 Class1从来没有反过来操纵Class2。
的语法是:
friend class Class1;
不,你不包括头。更一般地说,除非实际上以某种方式使用类定义(例如,使用类的实例并且编译器需要知道其中的内容),否则不需要包含头。如果您只是按名称引用课程,例如你只需要一个指向类的实例的指针,然后编译器不需要看类定义 - 只要声明它就可以告诉它类:
class Class1;
这很重要,原因有两个:小的一点是它允许你定义相互引用的类型(但你不应该!);最主要的是它允许你减少代码库中的物理耦合,这可以帮助减少编译时间。
要回答Gary的评论,可观察到该编译和链接罚款:
class X;
class Y
{
X *x;
};
int main()
{
Y y;
return 0;
}
无需提供X的定义除非你实际使用的东西,从十
我的坏。我没有写在实际的代码中,虽然 – JDN 2012-04-11 20:27:08
在发布到SO之前总是编译你的代码:) – 2012-04-11 20:27:55
只要类最终包含在同一个二进制文件中(否则在链接过程中会出错) – 2012-04-11 20:33:08