2016-12-03 2 views
0

У меня возникла проблема с выяснением ошибки при использовании шаблонов и списков шаблонов. вот код. Ошибки я получаю все на той же линии, и такие вещи, как синтаксические ошибки, он говорит, что перечень печати незаконное использование типа пустоты и другая ошибка неузнаваем шаблон декларации/определениеОшибка с шаблоном класса T со списками

#include <iostream> 
#include <list> 
#include <deque> 
#include <functional> 
#include <algorithm> 

using namespace std; 

template<class T> 
void printList<T>(const list& lst, string s) { 

cout << s << ": "; 
for (typename list::const_iterator i = lst.begin(); i != lst.end(); i++) 
cout << *i << " "; 
cout << endl; 
} 

Он продолжает давать мне ошибки на линия с void printList<T> Может кто-то, пожалуйста, помогите мне узнать, почему это происходит?

+0

Вам действительно нужны все эти строки в главном, чтобы продемонстрировать проблему? –

+0

извините за это. я удалил ненужный код – zachstarnes

+1

Используйте 'list ', где у вас есть «список» и удалите неправильно размещенную «». –

ответ

0

Нормальный способ объявить функцию будет:

template<class T> 
void printList(const list<T>& lst, string s) 

Вам также необходимо изменить

cout << s << endl; 

в

cout << s.c_str() << endl; 

ИЛИ элегантнее только

#include <string> 

А также

list::const_iterator 

в

list<T>::const_iterator 

В противном случае вы не объявить тип шаблона из списка объекта.

+0

Большое вам спасибо! – zachstarnes

+0

'cout << s.c_str() << endl;' неверно. 'string' отлично работает с' cout'. –

+0

Я имею в виду, что s.c_str() работает ..., ему либо нужно будет использовать s.c_str(), либо включить для его компиляции кода (по крайней мере, на мой компилятор). – aah