-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);

Entity Manager がデータのコピーを提供する場合は、これで問題ありません (ポインターではないためだと思います)。

あなたがおそらく説明しなければならないのは、最初のループがインデックス変数の42で始まるというような不可解なforループを持っている理由です.1つのステップで2つのことを行っていると思います.

ご存じかもしれませんが、クラッシュする行を指定する必要があります。

最初にデータを選択して表示すると、おそらく自分でエラーを見つけることができます。

編集:自分が何をしているのか理解していないように見えます。コードをハックするだけでなく、問題を視覚化してください。さらに、あなたのロジックは私には明確ではありません.10個の要素を持つベクトルがある場合、要素0が見たい値を出力しない場合、要素-1にアクセスしようとするのはなぜですか? 逆に試して、0 の値に目的の値が含まれていない理由を確認してください。また、最初のコードを書いていないと仮定します。まずコードを理解するようにしてください。紙を用意して、現在のワークフローと構築しようとしている対象のワークフローを描きます。

于 2012-09-23T01:39:58.577 に答える