Antwort
Dies ist nicht der richtige Ort, um diese Frage zu stellen. Stellen Sie diese Art von Fragen zum späteren Nachschlagen zum Stapelüberlauf.
Sie geben nicht wirklich genug Code an, um ganz sicher zu sein, was falsch ist, aber eine Sache, die angesichts des Fehlers in den Sinn kommt, ist die folgende. Beachten Sie zunächst, dass Ihre get(int i)
-Methode gibt eine Kopie eines Card
zurück, nicht des tatsächlichen i-ten Card
aus der Kartensammlung. Dies bedeutet, wenn Sie dies tun :
(*Turn).getBoard().get(i).m_has_been_played_this_turn = 0;
Sie setzen tatsächlich die Variable m_has_been_played_this_turn
für eine temporäre Card
-Instanz, von der der Fehler möglicherweise stammt, da diese temporäre Card
-Instanz eine rvalue
und keine lvalue
.
Eine Möglichkeit, dies zu ändern, besteht darin, den Code wie folgt zu ändern:
Card card_ = (*Turn).getBoard().get(i); card_.m_has_been_played_this_turn = 0;
Aber das wird immer noch nicht gem Vervollständigen Sie, was ich glaube, dass Sie wollen, da card_
nur eine Kopie des i-ten Card
in Ihrer Kartensammlung ist. Wenn Sie die i-te Card
in Ihrer Kartensammlung wirklich ändern möchten, ändern Sie die Definition get(int i)
wie folgt:
Card & Card_collection::get(int i)
Das &
bedeutet, dass Sie eine Card
von als Referenz, sodass Sie die Card
direkt in der Kartensammlung direkt ändern können. Dann sollte der ursprüngliche Code, den Sie geschrieben haben, um m_has_been_played_this_turn
festzulegen, in Ordnung sein.