Zárt. Ez a kérdés témán kívül van . Jelenleg nem fogadja el a válaszokat.

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük