0

メソッドの 1 つで、「シンボル 'pa' を解決できませんでした」というエラーが発生しました。コード:

 PredefinedAtom* PredefinedSymbolTableCollection::findAtomByLexCode(u_int lex_code) {
      // PredefinedAtom* pa;  // <== ACCEPTED
      for(u_int i = 0; i < pst.size(); i++) {
          if((PredefinedAtom* pa = pst[i]->findAtomByLexCode(i)) != NULL){// <== BAD 
                          // some code
          }
      }
 }

「if」スコープ外で PredefinedAtom の型を宣言すると、コードがコンパイル/実行されます。ただし、「if」内で型を宣言しようとすると、コンパイラは「'pa' シンボルを解決できません」というエラーを発行します。「findAtomByLexCode」は、「PredefinedAtom*」または NULL へのポインターを返します。

4

1 に答える 1

3

ステートメントの条件で変数を定義することはifできますが、式で定義することはできません。次のように記述する必要があります。

if (PredefinedAtom* pa = pst[i]->findAtomByLexCode(i)) {
    ...
}

の値paが に変換されてbool、どの分岐が行われるかが決定されます。

于 2012-09-29T18:10:17.507 に答える