Проблема с перегрузкой оператора <<. Реализую класс для работы с кольцевой очередью и перегружаю оператор, чтобы выводить очередь. Когда пытаюсь вызвать строку cout << B выдаёт ошибку, не подскажите, в чём тут проблема. И доп. вопрос : зачем при написании функций часто указывается const, после описания передаваемых значений (как например у меня в функции show)?
#include <fstream>
#include <iostream>
#include <string>
typedef int bufor_type;
using namespace std;
template <typename type>
class Bufor
{
private:
type *Arr = new type;
int Start;
int End;
int Arr_Size;
bool circle;
public:
//______________________________________________________
Bufor():Arr_Size(0),Arr(NULL),End(0),Start(0){}
Bufor(int b_size, type *b_arr, int b_start,int b_end)
{
set(b_size,b_start,b_end);
Arr = b_arr;
}
//______________________________________________________
void set(int b_size,int b_start,int b_end)
{
Arr = new type[b_size];
Arr_Size = b_size;
Start = b_start;
End = b_end;
circle = false;
}
//_______________________________________
void Show(ostream& stream)const
{
for (int i = Start; i < End-1; i=(++i)%Arr_Size) stream << Arr[i] << " ";
}
//____________________________________________________
//operators
friend ostream& operator<<(ostream& st, const Bufor& A);
};
template<typename type>
ostream& operator<<(const ostream& st, const Bufor<type>& A)
{
A.show(st);
return st;
}
int main()
{
Bufor<bufor_type> A;
int *temp = new int;
Bufor<bufor_type> B(3,temp,0,0);
A = B;
cout << B;
return 0;
}
template<typename...>– Harry Apr 06 '16 at 15:52class U– koshachok Apr 06 '16 at 15:54typeв вашем объявленииBufor. Я обычно использую T, U, V... Вот по-привычке и написал U :) – Harry Apr 06 '16 at 15:59typename U? Почему именно передаётсяclass? – koshachok Apr 06 '16 at 16:01