Шаблоны C ++ не соответствуют вызову функции - PullRequest
1 голос
/ 20 ноября 2010

У меня есть функция-член класса шаблона, объявленная так:

template <class T>
int Data<T>::getPosition(vector<T> stuff, T newStuff, bool ascending)

Я вызываю это где-то со строкой

frequencies.insert(frequencies.begin() + getPosition(frequencies, current, ascending),
                       frequencies[i]);

Переменные для этой строки объявлены как:

vector<T> temp;
vector<int> frequencies;
int current = frequency.find(words[i])->second;

Однако вызов getPosition выдает эту ошибку:

Data.h|158|error: no matching function for call to 'primitives::Data<double>::getPosition(std::vector<int, std::allocator<int> >&, int&, bool&)'|
Data.h|165|note: candidates are: int primitives::Data<T>::getPosition(std::vector<T, std::allocator<_CharT> >, T, bool) [with T = double]|

Что я здесь не так делаю?

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

getPosition принимает три аргумента типа vector<T>, T и bool.Типизированный тип T в этом случае - double (как показано в сообщении об ошибке), и все же вы пытаетесь передать vector<int> и int в качестве первого и второго аргумента, соответственно.

Возможно, параметры для getPosition не должны быть шаблонными?Зависит от того, чего вы пытаетесь достичь - в конце концов, у вас есть жестко запрограммированные инт-векторы.

1 голос
/ 20 ноября 2010

Прототип вашей функции получает шаблон Data<t>, и похоже, что вы выполняете этот вызов для объекта типа Data<double> и передаете std::vector<int> и int, когда он, вероятно, ожидает std::vector<double> и double, чтобы соответствовать начальному шаблонному типу объекта Data.

0 голосов
/ 20 ноября 2010
vector<T> temp;

Разве T здесь не должен быть типа типа int, double или bool?

...