2012-06-22 2 views
0

값이 포함 된 개체가 있다고합시다. 개체 목록에서 특정 값의 개체 인덱스를 가져 오려고합니다. 나는 목록 반복기를 사용하지 않고 "모든 코드 경로에서 값을 반환하지 않습니다"라는 경고를 피하는 방법은 무엇입니까?

int MyClass::getIndex(list& somelist, int requiredValue) 
{ 

    for(i=0; i != somelist.count(); ++i) 
    { 

     if(somelist.at(i)->value() == requiredValue) 
      return i; 
     else 
      continue; 
    } 

return -1; 
} 

어떻게이 반복자를 사용하지 않고 경고 "모든 코드 경로에서 값을 반환하지 않습니다"피하기 위해, 그것을 할 수 아래의 코드를 사용?

+1

이 코드는 경고 메시지를 생성하지 않습니다. 질문을 완전히 무의미하게 만들기 위해 코드를 편집 한 이유는 무엇입니까? –

+3

OP :'return -1'을 추가 했습니까? –

+0

네, 그랬습니다 ...하지만 그 부분은 가치를 반환하지 않는다고 저는 여전히 믿고 있습니다 ... 나는 틀린가? 내가 시험해 볼게. – Sulla

답변

3

어쨌든 함수에서 T를 반환해야합니다.

  1. 반환 디폴트 값 (예를 들어, 포인터 nullptr, -1 정수 가능)
  2. 사용 boost::optional<T>
  3. 반환 끝 반복자 :

    값이 가능 목록에 존재하지 않는 경우에 당신은 옵션이 있습니다 또한
    std::list<int>::iterator find_something(std::list<int> &my_list) 
    { 
        for (auto it = my_list.begin(); it != my_list.end(); ++it) 
        { 
         if (cond) 
         { 
          return it; 
         } 
        } 
    
        return my_list.end(); 
    } 
    

당신은 단지 몇 가지 값으로 반복자를 찾으려면

, std::find를 사용하면 인덱스의 액세스를 필요로하는 경우

auto it = std::find(my_list.begin(), my_list.end(), my_value); 

마지막

목록을 사용하지 마십시오. 이 경우 벡터 사용

2

이 질문에 대한 대답은 "요소를 찾을 수 없을 때 어떤 일이 발생하기를 원하나요?"와 같은 대답입니다.

+0

+1! 이것은 의미가 있습니다. – Jay