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

Что я пытаюсь сделать:

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

Я написал программу так:

template<typename T>
int count(vector<T> tvec, const T &t);

template<>
int count(vector<const char *> tvec, const char *const &s)
{
    int count = 0;
    for (auto c : tvec)
        if (c == s) {
            ++count;
        }
    return count;
}

template<typename T>
int count(vector<T> 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<char>’ and ‘char [4]’)

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

2 ответа

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

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

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

Во-первых, похоже svec определяется как vector<string>может быть так и должно быть vector<const char*>;

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

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

vector<const char*> svec;
const char* chars = "GUO";
std::cout<<my_count(svec,chars);

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

Другие вопросы по тегам