1

私は非常に基本的なゲームに取り組んでおり、ゲームに関連するオブジェクトのstd::listコレクションがあります。私はそれを次のように宣言しました:

std::list<Target> targets;

私がそれを繰り返すとき、

for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
        Target t = *iter;
                t.move();
}

GUIでオブジェクトが更新されていません。ただし、反復ループを。に置き換えるとtargets.front().move()、1つのオブジェクトが正しく移動します。これは、ポインターを使用してコレクションを反復処理していないためだと思います。誰かがそれがどのように行われるかを説明できますか?ありがとう。

4

1 に答える 1

4

オブジェクトをコピーしています。次のようにしてください。

*iter.move()

使用するTarget t = *iter;場合は、目的のオブジェクトを移動するのではなく、基本的にオブジェクトのコピーを作成して移動します。

xtoflが言ったように(thx)、参照も取得できます。

Target &t = *iter;
t.move();
于 2009-11-26T12:02:15.450 に答える