Сообщение об ошибке “выводит конфликтующие типы для параметра” const T “

То, что я пытаюсь сделать:

Напишите специализированную версию шаблона из предыдущего упражнения для обработки vector и программы, использующей эту специализацию.

Я написал программу следующим образом:

 template int count(vector tvec, const T &t); template int count(vector tvec, const char *const &s) { int count = 0; for (auto c : tvec) if (c == s) { ++count; } return count; } template int count(vector tvec, const T &t) { int count = 0; for (auto c : tvec) if (c == t) { ++count; } return count; } cout << count(svec, "GUO"); 

но я получаю сообщение об ошибке

deduced conflicting types for parameter 'const T' ('std::basic_string' and 'char [4]')

Я хочу знать, как справиться с этим. и, кроме того, в функции шаблона кажется, что массив можно изменить на указатель, почему моя программа не может его обработать?

Не выводя по обоим параметрам, это приводит к конфликтам. Напишите это:

 template  int count(const vector& tvec, const typename vector::value_type& t); 

Кроме того, рассмотрите перегрузку вместо специализации. Специализация шаблона функции в значительной степени никогда не то, что вы хотите.

Во-первых, кажется, svec определяется как vector , возможно, это должен быть vector ;

Во-вторых, явным образом определите var как const char *;

Попробуй это:

 vector svec; const char* chars = "GUO"; std::cout< 

BTW: переменная типа char array (char []) может использоваться как указатель типа char (char *), но они различаются как тип, и они различаются как шаблонный пареметр.