2012-04-29 11 views
1

申し訳ありませんが、私は設定した2d配列(allStates)に状態が追加されていないという問題が発生しています。以下は呼び出されているaddState関数のコードです。 allStatesはこの時点まで空でなければならない10x10配列です。C++ランタイムの問題

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

どのようなヒントもありがとうございます。

EDIT:

aは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

'allStates'はどのように宣言されていますか?どのような授業が「a」の対象ですか?あなたは詳細を追加する必要があります – Attila

+0

アチラが言ったように、説明してください。それはC配列、std :: verctorなどですか? – chameco

+0

これらの質問の一部には編集されています。 – user1332364

答えて

1

私はオールステートについてより多くの情報を見たいと思っていますが、あなたが楽しむかもしれない、あるいは楽しめないヒントを教えてもらえます。条件としてストリームを使用する場合

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

、それはあなたのためのストリームをチェックして、あなたがつかむしようとしている値をつかむだけでなく、ブール値を返します。これは、.eof()& & .good()の両方として機能します。 '\ n'を配列、リストなどに偶然に読み込まないようにするのも良い方法です。

+0

ありがとう、私はallStates [] []の初期化を追加編集します – user1332364

+0

私が提案できる唯一の事は、実際にそのif文の中に入っているかどうかをテストすることです。私は、括弧を使わずに複数のメソッド呼び出しを使用するのは快適ではありませんでした。空ではありません。ほとんどの場合、何も問題はありません。 – Rhomnousia

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

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

+0

どうすればいいのですか? – user1332364

+0

しかし、私はどのようにオブジェクトでそれを行うでしょうか?配列全体に割り当てるオブジェクトを1つ作成するだけですか? – user1332364

+0

州についてさらに詳しい情報を投稿できますか?それはクラスですか?それともtypedefですか? – SDEZero