我有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)中。看起來大多數回答者都假設你是指頭文件。 –