2011-07-18 2 views
1

를 실행하지 않을 경우 위의 코드에서한 다른 문이 아래

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

와 나는 문제가 발생하고있는 부분입니다, 내 다른-경우 문은 전혀 실행하지 않는 것 같습니다. 내가 뭘하려고하면 수정 된.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, '전환'에는 많은 부분이 없습니다. 존재하지 않는다면 자동으로 항목을 추가하는'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