列表迭代器不可取消引用 运行 次

List Iterator not Dereferenceable Run time

portalManager::portalManager(SDL_Renderer* argRenderer)
{
    mLootManager = new lootManager();
    mLootManager->initialize();
    lootPortal* newPortal;
    newPortal = new lootPortal(128, 128, Portal::eForest, Tile::eForest);
    mPortalList.push_back(newPortal);
    newPortal = new lootPortal(256, 256, Portal::eForest, Tile::eForest);
    mPortalList.push_back(newPortal);
    mPortalSheet = new spriteSheet(192, 192, 0);
    mPortalSheet->loadTexture("Images/Portals.png", argRenderer);
    mRenderQuad.w = Tile::cTileSize;
    mRenderQuad.h = Tile::cTileSize;
    mTextureQuad.w = Tile::cTileSize;
    mTextureQuad.h = Tile::cTileSize;
}

void portalManager::render(int argX, int argY, int argW, int argH, SDL_Renderer* argRenderer)
{

std::list<lootPortal*>::const_iterator itr = mPortalList.begin();
for (itr = mPortalList.begin(); itr != mPortalList.end(); itr++);
{
    std::cout<<(*itr)->getX()<<std::endl;
    mRenderQuad.x = (*itr)->getX();
    mRenderQuad.y = (*itr)->getY();
    if ((mRenderQuad.x >= argX && mRenderQuad.x <= argX+argW) && (mRenderQuad.y >= argY && mRenderQuad.y <= argY + argH))
    {

        mTextureQuad.x = 0;
        mTextureQuad.y = 0;
    }
}

};

当我尝试取消引用迭代器时,问题出现在 render 的 for 循环中。

我检查过列表不为空,我可以访问列表的第一个和最后一个元素,但出于某种原因,for 循环总是抛出一个不可取消引用的列表迭代器。

问题出在这一行:

for (itr = mPortalList.begin(); itr != mPortalList.end(); itr++);
                                                                ^

您在 for 子句的末尾有一个虚假的分号。轻松修复 - 摆脱它。

如果您对为什么这会导致问题感到好奇 - 这意味着整个循环将在 之前 完成,它会继续执行正文中的代码循环(因为该代码实际上并不在循环体中)。一旦到达该代码,itr 等于 mPortalList.end().