Тема: шаблоний класс з дружньою функцією перезавантаженного оператора
Всім привіт, вивчаю С++, для вправи вирішив написати клас який реалізує роботу "стеку". Зіткнувся з такою проблемою. Якщо я залишаю все як є, але прибираю шаблоний тип uniVar(замість нього вказую char) все працює. Якщо я прибираю дружні функції і залишаю шаблоний тип uniVar також все працює. Але якщо я використовую і те і інше в мене виникає помилка яку усунути я не знаю як. Допоможіть студенту у вивчені C++
#include <iostream>
#define STEK_SIZE 512
using namespace std;
template <typename uniVar>
class stek{
private:
uniVar st[STEK_SIZE];
int pos;
public:
bool operator << (uniVar &val){
if(pos+1 < STEK_SIZE){
st[++pos] = val;
return true;
}else{
return false;
}
}
bool operator >> (uniVar &val){
if(pos > -1){
val = st[pos--];
return true;
}else{
return false;
}
}
friend bool operator << (uniVar &val, stek &ob);
friend bool operator >> (uniVar &val, stek &ob);
stek(){
pos = -1;
}
};
bool operator >> (uniVar &val, stek &ob){
if(ob.pos+1 < STEK_SIZE){
ob.st[++ob.pos] = val;
return true;
}else{
return false;
}
}
bool operator << (uniVar &val, stek &ob){
if(ob.pos > -1){
val = ob.st[ob.pos--];
return true;
}else{
return false;
}
}
int main(){
char sym;
char buffer[] = "hello world";
stek<char> Stek;
Stek << buffer[10];
Stek << buffer[9];
Stek << buffer[8];
Stek << buffer[7];
Stek << buffer[6];
Stek << buffer[5];
Stek << buffer[4];
Stek << buffer[3];
Stek << buffer[2];
buffer[1] >> Stek;
buffer[0] >> Stek;
while(Stek >> sym){
cout << sym;
}
cout << endl;
cout << "C++ work" << endl;
return 0;
}