列表迭代器不可取消引用 运行 次
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()
.
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()
.