2011-03-31 59 views
0

這裏的insert()部分出現錯誤,我不知道自己做錯了什麼。我試過不同的參數和參數數量,但似乎沒有任何工作。(C++)無法取得插入()工作,我做錯了什麼?

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(); 
    } 
} 

回答

3

insert需要iterator。用途:

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

您還需要在您的deque使用指針,現在你切 - 插入的gameObject

+0

謝謝你,完美的工作。 – NyanPrime 2011-03-31 16:53:43

0

試圖插入來自IGameObject派生的對象爲IGameObject部分的副本deque <IGameObject>將不起作用,因爲deque試圖在引用中存儲對象的副本,而不是引用本身。大多數情況下,如果您嘗試將類層次結構存儲到容器中,則可以通過將指針容器指向基類來完成此操作。

0

您致電insert應將迭代器(不是整數索引)傳遞給雙端隊列。你可以轉換一個整數索引到一個deque的迭代器的一種方式是通過:

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

...雖然還有一些其他的工作同樣出色的解決方案。

您還可以使用分號函數,如push_backpush_front,它們分別將您想要放入deque前端或後端的對象。