错误消息“推断参数'const T'的冲突类型”

时间:2014-02-21 06:15:06

标签: c++ c++11

我正在尝试做什么:

  

编写上一个练习中的模板的专用版本来处理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]’)

我想知道如何处理这个问题。而且,在模板函数中,似乎可以将数组更改为指针,为什么我的程序无法处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

不要推断两个参数,它会导致冲突。写下这个:

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

另外,考虑重载而不是专门化。专门研究一个功能模板绝不是你想要的。

答案 1 :(得分:0)

首先,似乎svec定义为vector<string>,也许它应该是vector<const char*>;

其次,明确地将var定义为const char *;

试试这个:

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

BTW:char数组(char [])类型的变量可以用作类型char指针(char *),但它们的类型不同,它们作为模板参数不同。