Перегрузка оператора постфиксного инкремента

У меня есть класс

class Match
{
private:
    char* team1 = new char[25];
    char* team2 = new char[25];
    char* month = new char[25];
    int number;
public:
    Match();
    Match(const char*, const char*, int, const char*);
    Match(Match&);
    ~Match();

    Match& operator= (Match&);
    Match& operator++ ();
    Match operator++ (int);

};

А это реализация методов класса:

Match::Match():number(25)
{
    strcpy(team1, "Barcelona");
    strcpy(team2, "Real Madrid");
    strcpy(month, "May");
}

Match::Match(const char* team1, const char* team2, int number, const char* month)
{
    strcpy(this->team1, team1);
    strcpy(this->team2, team2);
    strcpy(this->month, month);
    this->number = number;
}

Match::Match(Match& other)
{
    strcpy(this->team1, other.team1);
    strcpy(this->team2, other.team2);
    strcpy(this->month, other.month);
    this->number = other.number;
}

Match::~Match()
{
    delete[] team1;
    delete[] team2;
    delete[] month;
}

Match& Match::operator= (Match& match)
{
    strcpy(this->team1, match.team1);
    strcpy(this->team2, match.team2);
    strcpy(this->month, match.month);
    this->number = match.number;

    return *this;
}
Match Match::operator++ (int value)
{
    Match temp = *this;
    
    ++(*this);

    return temp;
}

Реализацию префиксного инкремента пропустил, так как много строк (из-за проверок).

Я не могу понять, как мне реализовать данную строчку в main:

Match match1, match2;
match1 = match2++;

Компилятор выдает ошибку, что отсутствует соответствующий оператор. Но я как только не испробовал менять перегрузку этого оператора, ничего не помогло, постоянно какие-то ошибки.


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

Автор решения: Harry

Вам надо правильно написать не оператор ++, а оператор присваивания:

Match& Match::operator= (const Match& match)

Понятно, почему const? Потому что возвращаемое вашим оператором ++ значение не является lvalue.

Ну, и надо дописать префиксный оператор ++, а то не слинкуется.

P.S. У вас же С++, зачем вам такие небезопасные и морочливые вещи, как С-строки? используйте string.

→ Ссылка