Выбивает ошибку на = (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){ // какая-то реализация }