1

さて、設定した 2 次元配列 (allStates) に状態が追加されないという問題が発生しています。以下は、呼び出されている addState 関数のコードです。allStates は 10x10 の配列で、この時点までは空である必要があります。

void addState(string stateName){
        for (int row=0; row<10; row++){
            for (int col=0; col<10; col++){
                if (allStates[row][col].get_name().empty()){
                    allStates[row][col].set_values(stateName);
                    cout << allStates[row][col].get_name();
                    break;
                }
            }   
        }   
};

以下は addState 関数が呼び出されるコード内の場所です。

while(!infile.eof() && infile.good()){
    infile >> command;
    cout << command;
    if (command == "addState"){
        string stateName;
        infile >> stateName;
        cout << "\n" << stateName;
        a.addState(stateName);
        cout << a.get_state(stateName).get_name();
    }
}

どんなヒントでも大歓迎です!

編集:

a はタイプ Area であり、addState、deleteState などを含むすべての関数を保持します。オブジェクトなしではこれらの関数を呼び出すことができないというエラーが表示されたので、それを可能にする変数を作成しました。

allStates は、これらすべての関数を使用して Area クラスで初期化されます。

EDIT2:

class Area{
State allStates[10][10];
public:
    void addState(string stateName){
        for (int row=0; row<10; row++){
            for (int col=0; col<10; col++){
                if (allStates[row][col].get_name().empty()){
                    allStates[row][col].set_values(stateName);
                    cout << allStates[row][col].get_name();
                    break;
                }
            }   
        }   
    };
    State get_state(string name){
        for (int row=0; row<10; row++){
            for (int col=0; col<10; col++){
                if (allStates[row][col].get_name() == name)
                    return allStates[row][col];
            }   
        }
    };
    void deleteState(string name){
        for (int row=0; row<10; row++){
            for (int col=0; col<10; col++){
                string newest;
                newest.clear();
                if (allStates[row][col].get_name() == name)
                    allStates[row][col].set_values(newest);
            }   
        }
    };
};

クラスにはさらにいくつかの関数がありますが、addState 関数が最初に呼び出されるため、他の関数に問題があるかどうかはわかりません。

4

2 に答える 2

2
allStates[row][col].get_name()

allState の値を初期化しましたか? そうでなければ、2次元配列にオブジェクトがないと思います

于 2012-04-29T19:45:23.777 に答える
1

allstate に関する詳しい情報をお待ちしておりますが、お楽しみいただけるかもしれないし、お楽しみいただけないかもしれない別のヒントをお伝えできます。

while(infile >> command) {
//code
}

ストリームを条件として使用すると、ストリームがチェックされ、bool が返され、取得しようとしている値が取得されます。.eof() && .good() の両方として機能します。また、'\n' を誤って配列やリストなどに読み込まないようにするための良い方法でもあります。

于 2012-04-29T19:37:15.917 に答える