To nie jest właściwe miejsce na zadawanie tego pytania, więc w przyszłości zadawaj tego typu pytania na Stack Overflow.
Tak naprawdę nie podajesz wystarczająco dużo kodu, aby mieć całkowitą pewność, co jest nie tak, ale jedna rzecz, która przychodzi na myśl, biorąc pod uwagę błąd, jest następująca. Najpierw zwróć uwagę, że get(int i)
zwraca kopię Card
, a nie rzeczywistą i-z Card
z kolekcji kart. To oznacza, że kiedy to zrobisz :
(*Turn).getBoard().get(i).m_has_been_played_this_turn = 0;
W rzeczywistości ustawiasz zmienną m_has_been_played_this_turn
dla tymczasowej Card
, która może być przyczyną błędu, ponieważ ta tymczasowa Card
instancja powinna być rvalue
, a nie lvalue
.
Jednym ze sposobów zmiany tego może być zmiana kodu na następujący:
Card card_ = (*Turn).getBoard().get(i); card_.m_has_been_played_this_turn = 0;
Ale to nadal nie będzie zgodne pomiń to, co według mnie chcesz, ponieważ card_
to po prostu kopia i-tego Card
z Twojej kolekcji kart. Jeśli naprawdę chcesz zmodyfikować iith Card
w swojej kolekcji kart, zmień definicję get(int i)
na następującą:
Card & Card_collection::get(int i)
To &
oznacza, że zdasz Card
z get(int i)
przez odniesienie, co pozwala bezpośrednio modyfikować Card
w kolekcji kart. Wtedy oryginalny kod, który napisałeś, aby ustawić m_has_been_played_this_turn
, powinien wystarczyć.