簡體   English   中英

向量迭代器不兼容…但是為什么呢?

[英]Vector iterators incompatible… but why?

我收到消息“向量迭代器不兼容”。 我試圖把頭纏住,但是什么也沒有。 我以前做過 相同的代碼,只是在接收“ cWORLD * World”的類中未使用。 我究竟做錯了什么?

謝謝!

    else if (Click[2] == true)
        {
            //go through objects and check collision
            for (vector<cOBJECT*>::iterator it = World->ReturnWorldObjects().begin(); it != World->ReturnWorldObjects().end();)
            {
                //Check for collision and delete object
                if (PointInRect(MouseX + offX, MouseY + offY, (*it)->getrect()) == true)
                {
                    // delete object, delete slot, pick up next slot
                    delete *it;
                    it = World->ReturnWorldObjects().erase(it);
                }
                else
                {    // no action, move to next
                    ++it;
                }
            }//for

        }//else if (Click[2] == true)

看起來ReturnWorldObjects返回向量的副本,而不是引用。 在這種情況下,您嘗試比較不同對象的迭代器,這不是標准檢查的,而是可以由檢查的迭代器檢查的(在這種情況下,我認為是MSVC檢查的迭代器)。

就像已經提到的@ForEveR一樣,您可以在函數ReturnWorldObjects()返回向量的副本。 在沒有看到此方法的聲明的情況下,我只能假設它類似於vector<cOBJECT*> ReturnWorldObject();

我認為您可以使用2個解決方案來解決這個問題:

1.返回對您的World Class中向量的引用

const vector<cOBJECT*>& ReturnWorldObjects()
{
   return m_vecWorldObjects; // Your vector here
}

2.獲得該函數的一個副本,並在您的代碼中使用它

...
vector<cOBJECT*> worldObjects = World->ReturnWorldObjects();
for (vector<cOBJECT*>::iterator it = worldObjects.begin(); it != worldObjects.end(); it++)
{
   ...
}
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM