我有3个类:A,B和C. C是由B编辑的#include
,B是由A编辑的#includ
。在C类中,我定义了一个按钮的处理程序,当按钮被推入,C将PostMessage
给对象A.如果我在C中包含A,我将有一个循环引用,那么我应该怎么做才能避免这个循环引用?C++包括避免循环引用
编辑:所有包括在实现文件中。
我有3个类:A,B和C. C是由B编辑的#include
,B是由A编辑的#includ
。在C类中,我定义了一个按钮的处理程序,当按钮被推入,C将PostMessage
给对象A.如果我在C中包含A,我将有一个循环引用,那么我应该怎么做才能避免这个循环引用?C++包括避免循环引用
编辑:所有包括在实现文件中。
您应该使用正向声明。由于C
不是A
的拥有者,因此我假定您有一个指向成员的指针。所以你并不需要包括:
class A; //forward declaration
class C
{
A* a;
};
在实现文件中,你会包括A.h
不过没关系。另外,如果可以,请尽可能使用A.h
和B.h
中的正向声明。
如果类X只有指针使用类Y,你应该声明类X.
这是一个好主意,让您的前置声明在一个单独的文件之前使用Y类的正向声明。 iosfwd is a standard example of this approach
如果类X以其他方式使用类Y,例如具有类型Y的成员,那么您需要类Y的完整定义,并且前向声明不会执行。
如果你指的是同一头文件的循环引用,一个共同的约定是包报头在DEFINE所以定义只包括一次,这样MyHeader.h文件:
#ifndef MyHeader_h
#define MyHeader_h
// my definitions here
#endif // MyHeader_h
也被广泛支持的是#pragma once
指令。
您尚未指定是否将所有这些文件包含在实现(.cc,.cpp)或标头(.h)中。看起来大多数回答者都假设你是指头文件。 –