【问题标题】:error cannot convert 'coll' (type 'std::__cxx11::list<char>') to type 'const char&'错误无法将“coll”(类型“std::__cxx11::list<char>”)转换为类型“const char&”
【发布时间】:2020-02-22 06:32:40
【问题描述】:

这里我正在尝试实现一个通用函数来打印容器的所有元素 但我收到以下错误,

#include<iostream>
#include<list>

using namespace std;
template <typename T>
void print_elements(const T& coll)
{
    for (const auto& elem : coll)
    {
    std::cout << elem << ' ';
    }
}

int main()
{
    list<char> coll; // list container for character elements

    //appenading a to z using lists
    for (char i = 'a'; i <= 'z'; ++i)
    {
        coll.push_back(i); //using the push back function 
    }

    for (auto elem : coll)   // in this case we have to use a range based for loop
    {       
    cout << elem << ' ';
    }
    cout << endl;
    cout << coll.size();

    print_elements<char>(coll);  
    return 0;
}

我也收到这些错误:

候选人:'模板无效 print_elements(const T&)' 无效 print_elements(const T& coll) 模板参数推导/替换 失败:

没有匹配的调用函数 'print_elements(std::__cxx11::list&)'
print_elements(coll);

【问题讨论】:

    标签: c++ templates generics stl


    【解决方案1】:

    错误在下面一行

    print_elements<char>(coll);
    

    因为您指定模板函数参数的类型为char,但您的coll不是类型为char,而是类型为std::list&lt;char&gt;

    因此,您需要传递正确的参数类型,例如:

    print_elements< std::list<char> >(coll);
    

    或让template argument deduction 自动确定模板参数类型,例如:

    print_elements(coll);
    

    【讨论】:

      【解决方案2】:

      我认为错误在这一行

           print_elements<char>(coll);  
      

      把这个改成

           print_elements<list<char>>(coll);
      

      或者你可以这样写

           print_elements(coll);
      

      【讨论】:

        猜你喜欢
        • 2021-10-28
        • 1970-01-01
        • 2021-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多