2011-07-18 9 views
1

を実行しない場合は、私は上記のコードで一つelse文は以下

 if(transition == *(vec.end()-1)) { //vec contains the ASCI code 
      vec.pop_back(); 
      --vec_index; 
      result.append(vec[vec_index]); 
     } else if(colors.find(modified.substr(1)) == colors.end()) { 
      cout << result << endl; 
      cout << "\033[0;37m"; 
      cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: " 
      //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: " 
      << nlines << endl; 
      exit(0); 
     } else { 
      cout << result << endl; 
      cout << "\033[0;37m"; 
      cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: " 
      //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: " 
      << nlines << endl; 
      exit(0); 
     } 

とのトラブルを抱えていますセクションで、私の他に、if文は全く実行していないようです。私がしようとしているのは、modified.substr(1)がマップに見つからない場合です。それ以外の場合は最初のエラーを出力します(カラー文字列はマップにありますが、ベクトルの最後のものと同じではありません)。 "else"エラー。しかし、私の場合は常に印刷されています。 modified.substr(1)の理由は、変更された(この場合)a /で始まるからです。あなたのコードvec

+0

私たちにもっとコードを与えてください - 'vec'、' modified'(そしておそらく他のもの)は空です。 –

答えて

2
transition = colors[modified.substr(1)]; 

map<> color;にエントリを作成します。だからあなたのelse if状態は決して真実ではありません。エントリを見つけるにはoperator []の代わりにmap::findを使用してください。何かのように、

map<string,string>::const_iterator it = colors.find(modified.substr(1)]; 

そしてitの代わりtransitionを使用しています。 stringを取得する必要がある場合、itを参照解除することができます(キーはit->first、文字列値はit->second)。

+0

移行はそれのどの部分を再生する必要はありません?ある時点でif-elseが真となるようにします。メインのif(transition == *(vec.end() - 1))はうまく動作します。 – Iuli

+0

@luli、 'transition'はあまり多くありません。それが存在しない場合には、エントリを静かに追加するのは '' colors [modified.substr(1)] 'です。だからあなたの 'else if'が実行されていないのです。残りの答えはあなたのデザインを変更することを提案することです。 – iammilind

+0

こんにちは、あなたが言ったように変更し、 'code'if(* it == *(vec.end() - 1)){{しかし、コンパイラは私にはoperator == – Iuli

1

はそう

if(transition == *(vec.end()-1)) 

は、未定義の動作につながる、空です。と値がそれを初期化し、既存いない場合

+0

申し訳ありません、prolly私は私のメイン全体を追加shoudlve。私のOPを編集する方法はありますか?編集:ああ、それを発見した、それはすぐにそれを更新する – Iuli