0

我在insert()这里遇到了一个错误,我不知道我做错了什么。我尝试了不同的参数和参数数量,但似乎没有任何效果。

m_oGameObjectList是 IGameObjects(基类)的双端队列。
m_sPosition是一个具有 3 个整数 (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应该将迭代器(不是整数索引)传递给双端队列。将整数索引转换为双端队列迭代器的一种方法是:

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

...尽管还有其他几种同样有效的解决方案。

您还可以使用双端队列函数,例如push_backpush_front,它们分别将您想要放在双端队列前面或后面的对象。

于 2011-03-31T16:52:51.440 回答