2

好的,这里最好避免歧义?

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 &,T &)”、“void std::swap(_Ty &,_Ty &)”还是......

顺便说一句,itv 是一个向量<int>::iterator。

谢谢。

4

1 回答 1

9

问题是 namespacestd还包含swap()函数,并且看起来您using namespace std;之前在某个地方,因此编译器无法决定swap()使用哪个 - 您来自全局命名空间或来自 namespace 的那个std

您需要在调用前加上 " ::" 以明确告诉编译器使用您swap()来自全局命名空间而不是来自命名空间std。或者,您可以重命名swap()函数或不使用using namespace std;.

于 2010-02-01T08:37:54.963 回答