2012-03-07 40 views

回答

1

不幸的是,它是不可能
AB是相互依賴的,所以至少其中一個必須被前向聲明以支持另一個。
typedef類型不能被轉發聲明爲class/struct

+0

有時候,我們不幸遇到了這種情況。例如,使用具有增加或減少優先級的函數的優先級隊列。 – user1140560 2012-03-07 04:53:26

2

你不能只使用typedefs來做到這一點。

代B中的類型定義:

typedef map<C, B::iterator> A; 
typedef list<D, A::iterator> B; 

變爲:

typedef map<C, list<D, A::iterator>::iterator> A; 
typedef list<D, A::iterator> B; 

然後代以它的類型定義:

typedef map<C, list<D, map<C, list<D, A::iterator>::iterator>::iterator>::iterator> A; 
typedef list<D, A::iterator> B; 

這種替代會永遠持續下去而不會坍塌......

編輯: 我應該指出,如果你圍繞地圖和列表製作包裝類,你可以轉發聲明這些類。

+0

你自己不確定它是否有效。你有沒有試過編譯它?這個答案是不實際的,它不起作用。 – iammilind 2012-03-07 04:04:49

+1

@iammilind我只是回答這個問題。我知道前向聲明是必要的,但我不認爲typedef可以被前向聲明。 – datdo 2012-03-07 04:31:33

相關問題