Я пытаюсь сделать двоичный шаблон поиска, когда я запускаю его с помощью примитива «int», код работает нормально, но когда я запускаю его с помощью «string» I получить ошибку«Нет соответствующей функции вызова ...» для функции шаблона
«нет вызова функции согласования с binary_search_template»
Почему это работает с Интс, но не строками?
Вот код
main{
std::vector<string> e;
e.push_back("a");
e.push_back("b");
e.push_back("c");
int index = binary_search_template(e, 0, d.size()-1.0, "a"); //error for strings but not ints
}
заголовочный файл
template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value);
template<typename T>
int binary_search_template(std::vector<T>& a, int from, int to, T value)
{
if (from > to) {
return -1;
}
int mid = (to + from)/2;
if (a[mid] == value) {
return mid;
}else if (a[mid] < value) {
return binary_search_template(a, mid+1, to, value);
}else {
return binary_search_template(a, from, mid, value);
}
}
Как насчет 'return binary_search_template (a, mid + 1, to, value);' –
В этой строке кода ошибка не отображается, только когда я вызываю ее из main и использую строку, но для ints она кажется work fine – user2076774
Я думаю, что это потому, что он не может вывести аргумент шаблона T как std :: string из значения «a». Вероятно, он выводит 'const char *' и путается. Таким образом, вы можете явно указать параметр шаблона или использовать 'std :: string ('a')' в качестве окончательного аргумента. –