Válasz
Erre nem megfelelő a kérdés feltevése, ezért későbbi felhasználás céljából tegye fel az ilyen típusú kérdéseket a Verem túlcsordulásról.
Nem igazán adsz meg annyi kódot, hogy teljesen biztos legyél benne, hogy mi a baj, de a hiba következtében egy dolog jut eszembe: Először vegye figyelembe, hogy a get(int i)
módszer a Card
másolatát adja vissza, nem pedig a tényleges ith Card
fájlt a kártyagyűjteményből. :
(*Turn).getBoard().get(i).m_has_been_played_this_turn = 0;
Valójában a m_has_been_played_this_turn
változót állítja be ideiglenes Card
példány, amelyből a hiba származhat, mivel ennek az ideiglenes Card
példánynak rvalue
-nek kell lennie, nem pedig lvalue
.
Ennek megváltoztatásának egyik módja lehet, ha a következőre módosítja a kódot:
Card card_ = (*Turn).getBoard().get(i); card_.m_has_been_played_this_turn = 0;
De ez még mindig nem fog megfelelni egészítse ki, amit hiszem, hogy szeretne, mivel a card_
csak másolata a kártyagyűjtemény ith Card
-ének. Ha valóban módosítani szeretné a kártyagyűjtemény ith Card
jét, akkor a get(int i)
definíciót állítsa a következőre:
Card & Card_collection::get(int i)
Ez a &
azt jelenti, hogy egy Card
-t át fog adni get(int i)
hivatkozással, amely lehetővé teszi a Card
közvetlen módosítását a Kártyagyűjteményen belül. Akkor az eredeti kódnak, amelyet a m_has_been_played_this_turn
beállításához írt, rendben kell lennie.