Код: Выделить всё
//list.h
template<typename ItemType>
class List
{
public:
friend ostream& operator <<(ostream& outs, const List<ItemType>& the_list);
}
//list.cpp
template<typename ItemType>
ostream& operator <<(ostream& outs, const List<ItemType>& the_list)
{
for(int i = 0; i < the_list.current_length; i++)
{
outs << the_list.item[i] << endl;
}
return outs;
}
//list_demo.cpp
#include <iostream>
#include "list.h"
#include "list.cpp"
using namespace std;
using namespace listsavitch;
int main()
{
List<int> first_list(2);
first_list.add(1);
first_list.add(2);
cout << "first_list = \n"
<< first_list;
return 0;
}
А также предупреждение, что используется нешаблонная дружественная функция.undefined reference to `operator<< bla-bla-bla'
Проблему решил расписав определение перегруженного оператора в интерфейсе класса. НО как заставить компилятор понимать изначальный вариант, что там дружественная функция шаблонная???