0

我有 3 个类:A、B 和 C。C#include由 B 编辑,B#includ由 A 编辑。在 C 类中,我为按钮定义了一个处理程序,当按下按钮时,C 将PostMessage指向对象 A。如果我在C中包含A,我会有一个循环引用,那么我应该怎么做才能避免这个循环引用?

编辑:所有包含都在实现文件中。

4

3 回答 3

7

您应该使用前向声明。由于C不是 的所有者A,我假设您有一个指针作为成员。所以你不需要包括:

class A; //forward declaration
class C
{
    A* a;
};

在实现文件中,您将包括A.h但没关系。此外,如果可以,请尽可能使用前向A.h声明B.h

于 2012-09-24T15:23:46.167 回答
1

如果类 X 仅通过指针使用类 Y,则应在声明类 X 之前使用类 Y 的前向声明。

将前向声明保存在单独的文件中是个好主意。iosfwd 是这种方法的标准示例

如果 X 类以其他方式使用 Y 类,例如有一个 Y 类型的成员,那么您需要对 Y 类进行完整定义,而前向声明将不会这样做。

于 2012-09-24T15:28:14.780 回答
0

如果您指的是同一个头文件的循环引用,通常的约定是将头包装在一个定义中,这样定义只包含一次,就像这个 MyHeader.h 文件:

#ifndef MyHeader_h
#define MyHeader_h

// my definitions here

#endif  // MyHeader_h

#pragma once该指令也得到广泛支持。

于 2012-09-24T15:38:24.857 回答