Я пытаюсь изучить специализацию шаблона для языка C++, попадая в эту ситуацию, я не могу решить сам. Коды ниже:Отсутствует соответствующий вызов функции для специализации шаблона const char *
#include <vector>
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
size_t count(const vector<string> &, const char* const &);
template <typename T>
size_t count(const vector<T>& v, const T& find) {
size_t c = 0;
for (auto ele : v) {
if (ele == find)
++c;
}
return c;
}
template <>
size_t count(const vector<double> &v, const double &find) {
size_t c = 0;
for (auto ele : v) {
if (abs(ele - find) < 0.0001)
++c;
}
return c;
}
template <>
size_t count(const vector<const char*> &v, const char* const &find) {
size_t c = 0;
for (auto ele : v) {
if (strcmp(ele, find) == 0)
++c;
}
return c;
}
size_t count(const vector<string> &v, const char* const &find) {
size_t c = 0;
for (auto ele : v) {
if (strcmp(ele.c_str(), find) == 0)
++c;
}
return c;
}
int main() {
vector<double> vd{0.1, 0.1, 0.2};
cout << count(vd, 0.1) << endl;
vector<string> vs{"I", "you", "I"};
cout << count(vs, "I") << endl;
vector<const char*> vc{"I", "you", "I"};
cout << count(vc, "I") << endl;
return 0;
}
Компиляция этот код cout << count(vc, "I") << endl;
сообщит об ошибке он не может найти вызов функции соответствия.
Однако я намеренно объявить специализацию для этого вызова функции, а именно template <> size_t count(const vector<const char*> &v, const char* const &find)
Что здесь не так?
спасибо.
Ссылка на указатель в значительной степени бесполезна, если вы не должны изменять указатель, который вы не делаете (поэтому вы пометили его как постоянный указатель, я думаю, что делает его еще более бесполезным на самом деле). Просто объявите аргумент как простой 'const char *'. –
Что касается вашей проблемы, когда вы спрашиваете о ошибках сборки, это помогает (много!), Если вы включаете фактические ошибки, которые вы получаете (в полном объеме, полный и неотредактированный) в теле вопроса. –