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.
谢谢.
问题是命名空间std还包含swap()函数,看起来像你之前的using namespace std;某个地方,因此编译器无法决定swap()使用哪个- 来自全局命名空间或来自命名空间的命名空间std.
您需要在前面添加" ::"来明确告诉编译器使用swap()全局命名空间而不是命名空间std.或者,您可以重命名您的swap()功能或不使用using namespace std;.