繁体   English   中英

列表迭代器不可取消运行时间

[英]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;
    }
}

};

当我尝试取消引用迭代器时,问题发生在渲染的for循环中。

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

问题在这一行:

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

在for子句的末尾有一个假冒的分号。 轻松解决-摆脱它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM