Выбивает ошибку на = (b = a--;), отсутствует оператор "=", соответствующий этим операндам, типы операндов: MyClass = MyClass. Как это решить?

Требуется реализовать перегрузку операции -- (b=a--), но выдает ошибку

#include <iostream>
#include <conio.h>
using namespace std;
class MyClass
{
private:
    char str[100];
public:
    MyClass(){strcpy(str,"");};
    MyClass(char *);
    ~MyClass();
    MyClass operator--();
    void operator=(MyClass&);
    void Show ();
    void Input();
};

MyClass::MyClass(char *s)
{
    strcpy(str,s);
}
MyClass::~MyClass()
{
    strcpy(str,"");
}
void MyClass::Show()
{
    cout << "New String: " << str << endl;
}
void MyClass::Input()
{
    cout << "Enter String: ";
    cin >> str;
}
MyClass MyClass::operator --()
{
    char str1[100]="";
    for (int i=0; i < strlen(str)-1; i++)
        str1[i]=str[i];
    //копирование с заменой
    strcpy(str,str1);
    return *this;
}
void MyClass::operator =(MyClass &MC)
{
    strcpy(str,MC.str);
}
int main()
{
    MyClass a, b;

    a.Input();

    b = a--;

    b.Show();

    _getch();
    return 0;
}


Ответы (1 шт):

Автор решения: Fat-Zer

operator=() должен принимать константную ссылку:

void MyClass::operator=(const MyClass &MC)

А ещё определён только префиксный operator--() т.е. надо сделать одно из двух:

  • Собственно использовать префиксный operator--():

    b = --a;
    
  • Определить постфиксный operator--():

    MyClass MyClass::operator--(int){
      MyClass tmp(*this);
      // какая-то реализация
      return tmp;
    }
    

    Для корректной семантики также нужно будет доопределить конструктор копирования:

    MyClass::MyClass(const MyClass & mc){
      // какая-то реализация
    }
    
→ Ссылка