-1

相关代码如下:

我已经分别测试了每个 Nurse 对象分配和整个事情,并且数据存储正确,但由于某种原因我无法访问它来确定要显示哪些图块。我也尝试过在没有迭代器的情况下访问数据,但这也不起作用。任何想法都非常感谢,我已经尝试了好几个小时:/

for(unsigned int j = 42; j < EntityManager::getInstance()->nurses.size() * 42 + 42; j += 42) //increment y axis
{
    int rosterCounter = 0;
    int count = 0;
    vector<string> roster = EntityManager::getInstance()->nurses[count]->getRosterData();
    vector<string>::const_iterator iter;

    iter = roster.begin();

    for(unsigned int i = GraphicsCore::getInstance()->screenWidth; rosterCounter <= EntityManager::getInstance()->getSize() && iter != roster.end(); i -= 64) //iterate through each column, RTL
    {

        TextBox * text;

        if(*iter == "D")
        {
            text = new TextBox("resources/tiles/textboxshortd.png", i, j, (TextBox::type) 4);
        }
        else if(*iter == "N")
        {
            text = new TextBox("resources/tiles/textboxshortn.png", i, j, (TextBox::type) 4);
        }
        else if(*iter == "O")
        {
            text = new TextBox("resources/tiles/textboxshorto.png", i, j, (TextBox::type) 4);
        }
        else
        {
            text = new TextBox("resources/tiles/textboxshort.png", i, j, (TextBox::type) 4);
        }
        iter++;
        rosterCounter++;
    }
    count++;
}

编辑:它现在运行,但第一次迭代似乎什么都不做,出于某种原因,第一列中根本没有放置任何图块,而且它似乎完全偏移了 1。我尝试了 begin()-1 但这没有用任何一个。谢谢你们的帮助:)

4

2 回答 2

3

您永远不会检查您的迭代器以查看它是否为!= roster.end(). 如果是这样,当您尝试取消引用或增加它时,它将导致未定义的行为。

另外,请注意您的代码很可能会泄漏。你从来没有delete text;

于 2012-09-23T01:28:11.683 回答
0

如果你知道它的大小

vector.size()

您可以通过以下方式访问每个元素

vector.at(x);

如果实体管理器为您提供数据的副本,那么这应该没问题(我假设它不是指针)

你可能需要解释的是为什么你有如此神秘的 for 循环,你的第一个循环在索引变量中以 42 开头是没有意义的,我认为你一步要做两件事,这让你的生活更加困难。

正如您可能知道的那样,您应该提供崩溃所在的行。

如果您首先选择数据并在显示它之后,您可能会自己发现错误。

编辑:我已经意识到你似乎不明白你在做什么,不要只是在你的代码中乱搞,想象你的问题。另外,我不清楚您的逻辑,当您有一个包含 10 个元素的向量时,如果元素 0 不会打印出您想要查看的值,您为什么要尝试访问元素 -1?你应该反过来尝试,检查为什么 0 的值不包含你想要的。我也假设你没有写过初始代码,先试着理解代码。拿一些纸并画出当前的工作流程和您正在尝试构建的目标工作流程。

于 2012-09-23T01:39:58.577 回答