这是我在main.cpp中的代码
std::list<AbstractBlock*>::iterator i;
for (i = universe.getLoadedBlocks().begin(); i != universe.getLoadedBlocks().end(); i++){
window.draw((*i)->draw());
}
Run Code Online (Sandbox Code Playgroud)
Universe.cpp:
std::list<AbstractBlock*> Universe::getLoadedBlocks(){
return chunkManager->getLoadedBlocks();
}
Run Code Online (Sandbox Code Playgroud)
CunkManager.cpp:
std::list<AbstractBlock*> ChunkManager::getLoadedBlocks(){
return loadedBlocks;
}
Run Code Online (Sandbox Code Playgroud)
而loadedBlocks是一个 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());
}
Run Code Online (Sandbox Code Playgroud)
正如Jarod42指出的那样,你也可以使用更方便/简洁的基于范围的for循环,假设你使用的是兼容C++ 11的编译器.
for (auto& block : universe.getLoadedBlocks())
{
window.draw(block->draw());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |