Здравствуйте, Аноним, Вы писали:
А>А>class Simple
А>{
А>public:
А> int a;
<skip>
А> Simple& operator= (const Simple& c)
А> {
А> cout << "Operator =\n";
А> if(this!=&c) *this=c; // Здесь ошибка
А> return *this;
А> }
<skip>
А>
*this=c равносильно this->operator=(c), т.е. получается что из operator= мы вызываем самих себя.
Вот и получается рекурсия без остановки -> переполнение стека и ошибка.
Правильно написать так :
Simple& operator=(const Simple& c)
{
cout << "operator=\n";
a = c.a;
return *this;
}