[英]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.