ошибка не может преобразовать 'coll' (тип 'std :: __ cxx11 :: list <char>') в тип "const char &" - PullRequest
0 голосов
/ 22 февраля 2020

здесь я пытаюсь реализовать универсальную c функцию для печати всех элементов контейнера, но я получаю следующие ошибки,

#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 &)' void print_elements (const T & coll) Сбой вывода / замены аргумента шаблона:

нет соответствующей функции для вызова 'print_elements (std :: __ cxx11: : list &) '
print_elements (колл);

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Ошибка в следующей строке

print_elements<char>(coll);

, поскольку вы указываете, что параметр функции шаблона имеет тип char, но вы coll , а не типа char но типа std::list<char>.

Поэтому вам нужно либо передать правильный тип параметра, например:

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

, либо позволить вычет аргумента шаблона определить типы аргументов шаблона автоматически нравится:

print_elements(coll);
1 голос
/ 22 февраля 2020

Я думаю, что ошибка в этой строке

     print_elements<char>(coll);  

Измените это на

     print_elements<list<char>>(coll);

или вы можете поставить вот так

     print_elements(coll);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...