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 は vector<int>::iterator です。

どうも。

4

1 に答える 1

9

問題は、名前空間stdにもswap()関数が含まれておりusing namespace std;、以前のどこかにあるように見えるため、コンパイラはどちらswap()を使用するかを決定できません-グローバル名前空間からのものか、名前空間からのものかstd

from namespace ではなく from グローバル名前空間::を使用するようコンパイラに明示的に指示するには、呼び出しの前に " " を追加する必要があります。または、関数の名前を変更するか、使用しないこともできます。swap()stdswap()using namespace std;

于 2010-02-01T08:37:54.963 に答える