Задать вопрос
@rus_prog
Начинающий программист

Как выводить объекты шаблона класса с разными типами с перегруженным оператором вывода?

Создал шаблон класса односвязного списка с перегруженным оператором вывода. Когда совершаю операцию вывода для классов с разными типами в одном блоке, пишет ошибку:
error: redefinition of 'template std::ostream& operator<<(std::ostream&, const List&)'.
Код:
#include <iostream>
using namespace std;

template<class T, int size>
class List 
{
public:
	struct Item{
		T value;
		struct Item *next = nullptr;
	};
    struct Item* BeginList = nullptr;
    int last = 0;
	
	template<class U, int Size>
	friend ostream& operator<< (ostream &os, const List<U, Size>& list){
		struct Item* item = (Item*)list.BeginList;
		os << "List ( " << list.last+1 << " )" << endl;
		while (item){
			os << item->value << endl;
			item = item->next;
		}
		return os;
	}
	
};

int main(){
    List<int, 5> ListInt;
	List<char, 5> ListChar;

    cout << ListInt << endl; //тут выводит
    cout << ListChar << endl; //тут ошибка

    return 1;
}

Можно ли как то исправить это? Или нужно специализировать для всех типов?
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
0hquazEd
@0hquazEd
template<class U, int Size> убери и всё заработает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы