2011-02-04 32 views
0

(這個問題有任何人願意出手賞金)不一致使用錯誤模板函數

您好我已經定義重載函數模板與容器類作爲參數

(這裏CntrlCls1 = RWTValOrderedVector和CntrlCls2 = RWTPtrSortedVector

template<Class X> void func(CntrCls1<X>*){} 

template<Class X> void func(CntrCls1<X*>*){} 

template<Class X> void func(CntrCls2<X>*){} 

定義我調用函數後如下

func(&ABC); 

其中ABC是類型的實例CntrCls1 < *>(即,它是一個指針的容器)

現在這是在我的電腦上編譯得很好,但是當我在不同的系統上編譯時,出於某種原因,編譯器試圖用CntrlCls2參數實例化函數模板,結果給錯誤。

CtrCls1和CtrCls2是不相關的容器。

更新:我使用VS 2008在這兩個系統上構建,所以不應該是一個問題。

UPDATE1:我想:-(

+1

你能提供更多的細節嗎?你在用什麼編譯器?你收到什麼錯誤信息? – templatetypedef 2011-02-04 08:55:38

回答

0

1)註釋掉與CtrCls2參數函數模板現在編譯試圖實例化的第一個函數(不指針IE)後重新編譯檢查的Service Pack中安裝了VS 2008 。 Compilator版本可能會有所不同,導致不同的結果。

2)嘗試在模板聲明中使用「typename」關鍵字而不是「class」。

並順便說一句。從代碼我看到你正在使用指針的值爲排序容器。有序容器希望能夠找到像

template<T> bool operator<(const T&left, const T&right); 

比較由於RWTValOrderedVector和RWTPtrSortedVector看起來像一個包含排序orded他們應該使用這樣的比較運算值的容器。但是,對於指針類型,運算符<函數會比較它們的地址,而不是它們指向的對象。 因此,將指針存儲在有序容器中將爲您提供排序的指針集,而不是指向排序對象的指針集。 只是FYI。