我有 3 个类:A、B 和 C。C#include
由 B 编辑,B#includ
由 A 编辑。在 C 类中,我为按钮定义了一个处理程序,当按下按钮时,C 将PostMessage
指向对象 A。如果我在C中包含A,我会有一个循环引用,那么我应该怎么做才能避免这个循环引用?
编辑:所有包含都在实现文件中。
我有 3 个类:A、B 和 C。C#include
由 B 编辑,B#includ
由 A 编辑。在 C 类中,我为按钮定义了一个处理程序,当按下按钮时,C 将PostMessage
指向对象 A。如果我在C中包含A,我会有一个循环引用,那么我应该怎么做才能避免这个循环引用?
编辑:所有包含都在实现文件中。
您应该使用前向声明。由于C
不是 的所有者A
,我假设您有一个指针作为成员。所以你不需要包括:
class A; //forward declaration
class C
{
A* a;
};
在实现文件中,您将包括A.h
但没关系。此外,如果可以,请尽可能使用前向A.h
声明B.h
。
如果类 X 仅通过指针使用类 Y,则应在声明类 X 之前使用类 Y 的前向声明。
将前向声明保存在单独的文件中是个好主意。iosfwd 是这种方法的标准示例
如果 X 类以其他方式使用 Y 类,例如有一个 Y 类型的成员,那么您需要对 Y 类进行完整定义,而前向声明将不会这样做。
如果您指的是同一个头文件的循环引用,通常的约定是将头包装在一个定义中,这样定义只包含一次,就像这个 MyHeader.h 文件:
#ifndef MyHeader_h
#define MyHeader_h
// my definitions here
#endif // MyHeader_h
#pragma once
该指令也得到广泛支持。