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