C ++我的第一个模板

时间:2010-02-01 08:35:54

标签: c++ templates ambiguity

好的,这是避免歧义的最好方法吗?

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 */

使用交换调用也不起作用,因为它说不能解决它是否是“void swap(T&amp;,T&amp;)”,“void std :: swap(_Ty&amp;,_ Ty&amp;) “或......

顺便说一句,itv是一个向量&lt; int&gt; :: iterator。

THX。

1 个答案:

答案 0 :(得分:9)

问题是命名空间std还包含swap()函数,看起来你之前某处有using namespace std;,所以编译器无法决定使用哪个swap() - 你的来自全局命名空间或来自命名空间std

您需要在调用前添加“::”以明确告诉编译器使用全局命名空间中的swap()而不是命名空间std。或者,您可以重命名swap()功能或不使用using namespace std;