C ++ Мой первый шаблон - PullRequest
       14

C ++ Мой первый шаблон

2 голосов
/ 01 февраля 2010

Хорошо, что здесь лучше, чтобы избежать двусмысленности?

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 &)» или .. .

Кстати, это вектор :: iterator.

Thx.

1 Ответ

9 голосов
/ 01 февраля 2010

Проблема в том, что пространство имен std также содержит swap() функцию и выглядит так, как будто у вас есть using namespace std; где-то раньше, поэтому компилятор не может решить, какой swap() использовать - ваш из глобального пространства имен или из пространство имен std.

Вам необходимо добавить к вызову "::", чтобы явно указать компилятору использовать swap() из глобального пространства имен, а не из пространства имен std. В качестве альтернативы вы можете переименовать вашу swap() функцию или не использовать using namespace std;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...