[英]C++ List Iterators Incompatible
這是我main.cpp中的代碼
std::list<AbstractBlock*>::iterator i;
for (i = universe.getLoadedBlocks().begin(); i != universe.getLoadedBlocks().end(); i++){
window.draw((*i)->draw());
}
Universe.cpp:
std::list<AbstractBlock*> Universe::getLoadedBlocks(){
return chunkManager->getLoadedBlocks();
}
CunkManager.cpp:
std::list<AbstractBlock*> ChunkManager::getLoadedBlocks(){
return loadedBlocks;
}
並且loadingBlocks是std::list<AbstractBlock*>
我正在嘗試使用列表,並首次嘗試使用它們...我不確定為什么會出現此錯誤
std::list<AbstractBlock*> Universe::getLoadedBlocks() { ... }
^^^^^^^^^^^^^^^^^^^^^^^^^ // This returns a copy of the list
因此, universe.getLoadedBlocks().begin()
使用列表的一個副本,而universe.getLoadedBlocks().end()
使用列表的另一個副本。 這就是迭代器不兼容的原因(即,它們來自不同的列表)。
換句話說,一個列表實例的begin
迭代器永遠不會等於其他列表實例的end
迭代器。
如果不更改getLoadedBlocks()
函數,則可以嘗試:
std::list<AbstractBlock*> values = universe.getLoadedBlocks();
for (i = values.begin(); i != values.end(); i++) // Note: You should use ++i here (for possible efficiency benefits)
{
window.draw((*i)->draw());
}
正如Jarod42所指出的,假設您使用的是與C ++ 11兼容的編譯器,那么您還可以使用更方便/更簡潔的基於范圍的for循環。
for (auto& block : universe.getLoadedBlocks())
{
window.draw(block->draw());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.