Mam problem z małym programem, w którym po
przeładowaniu operatora + wyskakuje błąd: "no matching function for call to" .
Oto kod:
#include <iostream>
using namespace std;
class K1
{
string * p1;
public:
K1():p1(new string()){};
K1(string& wyraz):p1(new string())
{
*p1 = wyraz;
}
K1(const K1& kop)
{
*p1 = *kop.p1;
}
string operator[](size_t nr) const
{
return p1[nr];
}
K1 & operator=(const K1& ob)
{
if(this!=&ob)
{
*p1 = *ob.p1;
}
return *this;
}
friend ostream& operator<<(ostream & out, const K1& p);
};
ostream& operator<<(ostream & out, const K1& p)
{
out << *p.p1;
return out;
}
class K2
{
K1 txt[2];
int w1;
public:
K2():w1(0){}
K2(string wyraz_1, string wyraz_2, int w)
{
txt[0] = wyraz_1;
txt[1] = wyraz_2;
w1 = w;
}
K2(const K2& kop)
{
txt[0] = kop.txt[0];
txt[1] = kop.txt[1];
w1 = kop.w1;
}
K2 & operator=(const K2& ob)
{
if(this!=&ob)
{
txt[0] = ob.txt[0];
txt[1] = ob.txt[1];
w1 = ob.w1;
}
return *this;
}
friend K2 & operator+(const K2& ob, int liczba);
friend ostream& operator<<(ostream & out, const K2& p);
};
K2 & operator+(const K2& ob, int liczba)
{
return K2(ob.txt[0], ob.txt[1], ob.w1 + liczba);
}
ostream& operator<<(ostream & out, const K2& p)
{
out << p.txt[0] << " " << p.txt[1] << " " << p.w1 << endl;
return out;
}
int main()
{
K2 ob1, ob2;
const K2 * wsk1 = new K2("Ala ", "Koala ", 15);
K2 ob3(*wsk1);
delete wsk1;
wsk1 = 0;
const K2 * wsk2 = new K2(ob3);
ob2 = *wsk2;
cout << ob1 << *wsk2;
delete wsk2;
wsk2 = 0;
cout << endl;
cout << ob2;
return 0;
}
Co trzeba zrobić z tym kodem, aby nie wyskakiwał błąd?
Proszę o podpowiedź.