2010-02-01 33 views
2

好的,哪裏最好避免含糊不清?C++我的第一個模板

template <class T> 
inline void swap(T &a, T &b) 
{ 
    T c; c = a; a = b; b = c; 
} 
/* blah blah blah (inside of a function:) */ 
for (itv = vals.begin(); itv != vals.end(); ++itv) 
{ 
    if (at < (*itv)) { swap(at, (*itv)); } 
    if (at % (*itv) == 0) atadd = false; 
} 
/* blah blah blah */ 

與交換呼叫也不管用,因爲它說無法解決無論是 「無效掉期(T &,T &)」,「無效化std :: swap(_Ty &,_Ty &) 「或...

順便說一句,itv是一個向量<int> ::迭代器。

Thx。

回答

9

問題是命名空間std也包含swap()功能,看起來你有using namespace std;地方較早,所以編譯器無法決定使用哪種swap() - 從全局命名空間或命名空間std的一個你。

你需要在前面加上「::」的號召,明確地告訴編譯器使用您的swap()從全局命名空間,而不是從命名空間std。或者,您可以重命名您的swap()函數或不使用using namespace std;

+1

這給我們帶來了爲什麼重新定義'swap',當它已經在標準中可用時。 – 2010-02-01 09:14:15