Witam,
napotkałem na pewien problem chcąc przeciążyć operator = . Wzorowałem się trochę na tym Jak przeciążyć operator strumienia w klasie szablonowej i Przeładowywanie operatorów
Kod mam taki:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
template <int m_przed, int m_po> class Klasa; //deklaracja szablonu klasy
template <int m_przed, int m_po> ostream& operator<< (ostream &, const Klasa<m_przed, m_po> &);
template <int m_przed, int m_po> Klasa<m_przed, m_po>& operator= (const Klasa<m_przed, m_po> &);
template <int m_przed, int m_po>
class Klasa{
private:
string s_przed, s_po;
public:
Klasa(string przed, string po){
s_przed = przed;
s_po = po;
}
friend ostream& operator<< <>(ostream &, const Klasa<m_przed, m_po> &);
friend Klasa<m_przed, m_po>& operator= <>(const Klasa<m_przed, m_po> &);
};
template <int m_przed, int m_po> ostream& operator<< (ostream & os, const Klasa<m_przed, m_po> &l){
os << l.s_przed << "." << l.s_po << endl;
return os;
}
template <int m_przed, int m_po> Klasa<m_przed, m_po>& operator= (const Klasa<m_przed, m_po> &l){
s_przed = l.s_przed;
s_po = l.s_po;
return *this;
}
int main(){
Klasa<2,3> a("12", "654");
Klasa<2,1> b("22", "1");
cout << a;
b = a;
//cout << b + a;
return 0;
}
Operator<< mi działa, zaś problem mam z operatorem = i pewnie problemy będą również z operatorami arytmetycznymi. Kompiluje to w VisualStudio 11 i nie podoba mu się:
template <int m_przed, int m_po> Klasa<m_przed, m_po>& operator= (const Klasa<m_przed, m_po> &); - error C2801: 'operator =' must be a non-static member
oraz w linii gdzie zamykane jest ciało operatora pokazuje fatal error C1903: unable to recover from previous error(s); stopping compilation.
Nie potrafię sobie z tym poradzić, prosze o pomoc.