好的,这是避免歧义的最好方法吗?
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。
答案 0 :(得分:9)
问题是命名空间std
还包含swap()
函数,看起来你之前某处有using namespace std;
,所以编译器无法决定使用哪个swap()
- 你的来自全局命名空间或来自命名空间std
。
您需要在调用前添加“::
”以明确告诉编译器使用全局命名空间中的swap()
而不是命名空间std
。或者,您可以重命名swap()
功能或不使用using namespace std;
。