私はC++のゲームに取り組んでいます。私のレベルのオブジェクトはベクトルにあります(オブジェクトは私のレベルのオブジェクトのスーパークラスです)。C++:ポインタのベクトルを完全にコピー
このベクターの状態がチェックポイントに保存され、死んで取得される必要があります。
レベルの始めに、ベクター(オブジェクト)が作成されます(old_objects)。
チェックポイントにヒットした場合、old_objectsは消去され、オブジェクトはold_objectsに再コピーされます。
死亡した場合、オブジェクトからのデータは消去され、old_objectsはオブジェクトにコピーバックされます。
私はこれをいくつかの方法で実行しようとしてきましたが、それを動作させることはできません。助けて?
EDIT:仮想クローン()メソッドを使用してみました。範囲外のエラーが発生します。
class Object {
public:
virtual Object* clone() { return new Object(); }
};
class SubObjectA {
public:
Object* clone() { return new SubObjectA(datablahblah); }
};
class SubObjectB {
public:
Object* clone() { return new SubObjectB(datablahblah); }
};
for (vector<Object*>::iterator it = objects.begin(); it != objects.end(); it++) {
Object* tempobj = *it;
old_objects.push_back(tempobj->clone());
}
しかし、私が得るすべては同じ古いです:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
あなたは今まで正確に何を試しましたか? – krammer
あなたはすでにどのように試してみましたか? –
ポインタのベクトルについては、 'Boost.PointerContainer'を考慮する必要があります。 –