错误无法将'coll'(类型'std :: __ cxx11 :: list ')转换为类型'const char&'

问题描述 投票:0回答:2

这里我试图实现一个通用功能来打印容器的所有元素但我遇到以下错误,

#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;
}

我也收到这些错误:

候选:'template void print_elements(const T&)'voidprint_elements(const T&coll)模板参数推导/替换失败:

没有匹配功能可调用'print_elements(std :: __ cxx11 :: list&)'print_elements(coll);

c++ templates generics stl
2个回答
1
投票

我认为错误在于这行

     print_elements<char>(coll);  

将其更改为

     print_elements<list<char>>(coll);

或者您可以这样放置

     print_elements(coll);

0
投票

错误在以下行中

print_elements<char>(coll);

因为您指定模板功能参数的类型为char,但是您的collnot类型为char但类型为std::list<char>

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

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

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

print_elements(coll);
© www.soinside.com 2019 - 2024. All rights reserved.