Здравствуйте уважаемые гуру. Я решил поизучать с++ на досуге, читаю книгу "C++ базовый курс" написанную Гербертом Шилдтом, третье издание. На стр 338 можно найти программу, иллюстрирующую перегрузку операторов:
#include <iostream>
#include <cstring>
class sample
{
char *s;
public:
sample();
sample(const sample &ob);
~sample(){if(s) delete [] s; std::cout << "deallocating memory\n";}
void show(){std::cout << s << "\n";}
void set(char *str);
sample operator=(sample &ob);
};
sample::sample()
{
s=new char('\0');
std::cout << "constructor called\n";
}
sample::sample(const sample &ob)
{
s =new char[strlen(ob.s)+1];
strcpy(s, ob.s);
std::cout << "copy constructor called\n";
}
void sample::set(char *str)
{
if (strlen(s) > strlen(str))
{
delete [] s;
s = new char[strlen(str)+1];
}
strcpy(s, str);
}
sample sample::operator=(sample &ob)
{
if (strlen(ob.s) > strlen(s))
{
delete [] s;
s = new char[strlen(ob.s)+1];
}
strcpy(s, ob.s);
std::cout << "redefined operator called\n";
return *this;
}
sample input()
{
char instr[80];
sample str;
std::cout << "enter string\n";
std::cin >> instr;
str.set(instr);
return str;
}
int main()
{
sample ob;
ob=input();
ob.show();
return 0;
}
Попытка скомпилировать выдает такое:
ya@shvabra:/mnt/maindisk/cpp$ g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:63: error: no match for ‘operator=’ in ‘ob = input()()’
test.cpp:38: note: candidates are: sample sample::operator=(sample&)
ya@shvabra:/mnt/maindisk/cpp$
Что я делаю не так?