迴圈引用的處理

2021-06-19 15:11:52 字數 736 閱讀 6473

迴圈引用:兩個類互相引用,導致單純互相引用標頭檔案,編譯無法通過。

解決方案:

首先,要理解宣告和實現之間的差別。宣告只需要在使用類的前面新增class ***,而實現是包含具體成員函式和變數的類。

如例1.

class a 

class b

1. 此時可在a的前面宣告class b,就可以使用b了。在b中只需要正常引用a的標頭檔案和命名空間即可。修改後如例2;

class b;

class a

#include using a;

class b

2. 修改之後,還是會報錯:forward declaration ...

這是為什麼呢?

這個宣告,有時候被稱為前向宣告(forward declaration),在程式中引入了類型別的screen.在宣告之後,定義之前,類screen是乙個不完全型別(incompete type),即已知screen是乙個型別,但不知道包含哪些成員.不完全型別只能以有限方式使用,不能定義該型別的物件,不完全型別只能用於定義指向該型別的指標及引用,或者用於宣告(而不是定義)使用該型別作為形參型別或返回型別的函式.

因此,修改如例3.

class b;

class a

#include using a;

class b

python迴圈引用的處理

假設同一資料夾下存在三個檔案 a.py,b.py 和run.py a和b中定義a,b,c類,run.py執行呼叫 a中定義類a和c,b中定義類b,其中b是a的子類,c是b的子類,因此b.py中需要import a,a.py中需要import b,造成迴圈引用 檔案內容分別如下 報錯版 a.py fr...

Block的迴圈引用

block是ios 4開始匯入的,類似lambda表示式,但是在使用block的過程中,很有可能引起引用迴圈。如下圖所示 當我們遇到這種情況時,可以有兩種解決方案。block修飾符 block id temp self void block void block 通過執行block方法,nil被賦值...

Block的迴圈引用

block的使用 1.概念 block實質就是乙個匿名函式塊,經過編譯器的編譯後,最終為乙個函式,block也是objective c中的物件,根據block物件建立時所處的資料區不同而進行區別 在棧上建立的block物件,nsconcretestackblock 在堆上建立的block物件,nsc...