關於C 兩個類相互引用的一點思考

2021-07-04 23:50:41 字數 1125 閱讀 2265

昨天跟朋友討論了一下在c++中如果出現兩個類相互引用的情況,編譯無法通過的問題如何解決:

// a.h

#ifndef a_h

#define a_h

#include "b.h"

class a

;#endif a_h

// b.h

#ifndef b_h

#define b_h

#include "b.h"

class b

;#endif // b_h

以上**是肯定無法編譯通過的,編譯器會告知如下錯誤:

error c2146: 語法錯誤 : 缺少「;」(在識別符號「a」的前面)

[問題分析]

這種引用方式是在乙個類中包含了另乙個類的例項,如:a類中包含了b類的例項,b類中又包含了a類的例項……如果允許這種情況出現,那麼在實際生成物件時,將出現遞迴包含,最後耗盡資源。因此,無法通過編譯是再正常不過了。

類似可行的情形是,乙個類包含另乙個類的例項,另乙個類包含指向前乙個類的指標。由於指標的使用,在例項化時將不會出現遞迴生成物件的問題。在標頭檔案包含方面,可以選擇乙個類的標頭檔案包含另乙個類的標頭檔案,而另乙個類的標頭檔案中只宣告需要引用的類,並在類中宣告指標變數:

// a.h

#ifndef a_h

#define a_h

#include "b.h"

class a

;#endif a_h

// b.h

#ifndef b_h

#define b_h

class a;

class b

;#endif // b_h

在main函式中只需要包含要使用的類標頭檔案即可:

#include "a.h"

int main()

或者#include "b.h"

int main()

關於兩個類相互包含引用的思考

今天遇到乙個問題,編譯時遇到了如下錯誤 錯誤1 error c2146 語法錯誤 缺少 在識別符號 move 的前面 錯誤2 error c4430 缺少型別說明符 假定為 int。注意 c 不支援預設 int 寫個最簡單的例子 ifndef robot h define robot h inclu...

C 兩個類相互引用的問題

c 中常會出現兩個類相互引用的問題,如果直接相互引用對方的標頭檔案,編譯時會報錯,下面給出乙個例子 a.h ifndef a h define a h include b.h classa endifb.h ifndef b h define b h include a.h classb endif...

c 兩個類相互包含引用的問題

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如 定義了類a類b,a中使用了b定義的型別,b中也使用了a定義的型別 class a class b 請注意上面的定義內容,一般情況下是不能出現類a,類b相互引用都定義物件,即如下的樣子 class a class b 在這種情況下,想想可以...