C++我的第一个模板

huf*_*uff 2 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 */
Run Code Online (Sandbox Code Playgroud)

使用交换调用也不起作用,因为它说无法解决它是否是"void swap(T&,T&)","void std :: swap(_Ty&,_ Ty&)"或......

顺便说一下,itv是一个vector <int> :: iterator.

谢谢.

sha*_*oth 9

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

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