0

ここでエラーが発生していますが、insert()何が間違っているのかわかりません。さまざまなパラメーターとパラメーターの数を試しましたが、何も機能していないようです。

m_oGameObjectListIGameObjects (基本クラス) の両端キューです。
m_sPosition3 つの int (X、Y、Z) を持つ構造体です。
gameObjectから派生したオブジェクトへの参照IGameObjectです。

for (int i = 0; i < m_oGameObjectList.size(); i++)
{
    if (gameObject.m_sPosition.Z > m_oGameObjectList[i].m_sPosition.Z)
    {
        m_oGameObjectList.insert(i, gameObject);
        i = m_oGameObjectList.size();
    }
}
4

3 に答える 3

3

insertかかりますiterator。使用する:

m_oGameObjectList.insert(m_oGameObjectList.begin() + i, gameObject);

また、でポインタを使用する必要がありますdeque。現在、スライスしています。のIGameObject一部のコピーを挿入します。gameObject

于 2011-03-31T16:52:11.267 に答える
0

IGameObjectから派生したオブジェクトをdeque<IGameObject>に挿入しようとすると、dequeがオブジェクトのコピーを参照自体ではなく参照に格納しようとしているため、機能しません。

ほとんどの場合、クラス階層をコンテナーに格納しようとする場合は、基本クラスへのポインターのコンテナーを使用して格納します。

于 2011-03-31T16:52:26.553 に答える
0

への呼び出しinsertは、(整数インデックスではなく) イテレータを両端キューに渡す必要があります。整数インデックスを deque イテレータに変換する 1 つの方法は、次のとおりです。

my_deque_iterator iter = m_oGameObjectList.begin();
std::advance(m_oGameObjectList, i);

...ただし、同様にうまく機能するソリューションが他にもいくつかあります。

push_backおよびのような両端キュー関数を使用することもできますpush_front。これは、両端キューの前または後ろに配置するオブジェクトをそれぞれ取得します。

于 2011-03-31T16:52:51.440 に答える