要定義這兩個類定義這兩個類「typedef map <C,B :: iterator> A; typedef list <D,A :: iterator> B」?
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
類A和B雙方互相牽制的迭代器。編譯器抱怨上述說法。 如何解決問題?
iammilind說這是不可能的。但是會出現這種邏輯關係,例如優先級隊列。所以任何人都有解決方法?
要定義這兩個類定義這兩個類「typedef map <C,B :: iterator> A; typedef list <D,A :: iterator> B」?
typedef map<C, B::iterator> A;
typedef list<D, A::iterator> B;
類A和B雙方互相牽制的迭代器。編譯器抱怨上述說法。 如何解決問題?
iammilind說這是不可能的。但是會出現這種邏輯關係,例如優先級隊列。所以任何人都有解決方法?
不幸的是,它是不可能。
A
和B
是相互依賴的,所以至少其中一個必須被前向聲明以支持另一個。
但typedef
類型不能被轉發聲明爲class/struct
。
你不能只使用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;
這種替代會永遠持續下去而不會坍塌......
編輯: 我應該指出,如果你圍繞地圖和列表製作包裝類,你可以轉發聲明這些類。
有時候,我們不幸遇到了這種情況。例如,使用具有增加或減少優先級的函數的優先級隊列。 – user1140560 2012-03-07 04:53:26