2011-07-18 35 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)時,會先打印第一個錯誤(顏色字符串在地圖中,但與矢量中的最後一個不同)打印「其他」錯誤。但是,我的其他情況始終是打印。之所以修改.substr(1)是因爲修改(在這種情況下)以/開頭。

+0

給我們更多的代碼 - 「vec」,「modified」(可能還有一些)是空的。 –

回答

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

將創建map<> color;一個條目和值初始化。這就是爲什麼你的else if條件永遠不會是真的。使用map::find而不是operator []來查找條目。喜歡的東西,

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

而且使用it代替transition。您可以在需要時取消引用it(因爲密鑰爲it->first,字符串值爲it->second),以便獲取底層string

+0

轉型不應該發揮它的任何部分應該嗎?對於if-else在某個點是成立的。主if(與轉換== *(vec.end() - 1))工作正常。 – Iuli

+0

@ luli,沒有'transition'沒有太多的部分;它是'colors [modified.substr(1)]'如果它不存在就悄悄地添加一個條目。這就是爲什麼你的'else if'沒有執行。我剩下的答案是建議改變你的設計。 – iammilind

+0

嗨,我已經改變了你說的,並使用'code'if(* it == *(vec.end() - 1)){然而,編譯器給我一個錯誤,因爲不匹配operator == – Iuli

1

在你的代碼vec是空的,所以

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

導致不確定的行爲。如果它不是現有

+0

對不起,prolly我shoudlve添加了我的整個主。有沒有辦法編輯我的OP?編輯:哦,發現它,會很快更新它 – Iuli