У меня есть классы Pile, которые представляют колоду карт и содержат экземпляры классов Card.Я перегружен двумя операторами, Pile :: operator + = и Pile :: operator -.
int main()
{
Pile pile1(false); //construct an empty pile/deck
Pile pile2(true); //construct a full deck with all 52 cards
output(pile1,pile2); //just a little procedure to print both decks
pile1 += --pile2;
output(pile1,pile2);
...
Operator + = берет другой Pile в качестве ссылки и перемещает каждую карту из параметра Pile в * this.Оператор - берет верхнюю карту из колоды и возвращает кучу, содержащую эту карту.
Что дает мне g ++, это ошибка времени компиляции, сообщающая
error: no match for 'operator+=' in 'pile1 += Pile::operator--()()'
note: candidate is: void Pile::operator+=(Pile&)
Ниже приведены перегруженныеоператоры:
void Pile::operator+=(Pile &other)
{
Node *n = other.listHead;
//add each card from other to *this
while((n = n->getNext()) != NULL)
{
this->newCardToList(other.drawCard());
}
}
Pile Pile::operator--()
{
Pile pile(false);
pile.newCardToList(this->drawCard());
return pile;
}
Мне кажется, что оператор + = пытается принять - в качестве параметра.Я попробовал Pill1 + = (--pile2);но это ничего не изменило.
То, что я хочу (или должен сделать здесь), это взять верхнюю карту из стопки 2 и положить ее в стопку 1.Не могли бы вы подсказать, что здесь не так, поскольку я ничего не смог придумать?
Редактировать: + = требуется для изменения обоих объектов здесь.Это необходимо, потому что человек, который дал нам этот проект упражнения на нашем курсе, требует, чтобы мы делали это таким образом.Хотя его дизайн был действительно плохим, поэтому я не удивлюсь, если бы это решение было даже невозможно.