2016-10-08 2 views
-2

주어진 컨테이너에 저장된 일부 요소 (numElems)가 전달 된 요소 인 elems과 같은지 확인하는 템플릿 함수입니다.람다 함수로 인해 컴파일이 실패 함

template<typename MyType> 
bool Container<MyType>::elemsEqual(const int & numElems, const std::initializer_list<MyType>& elems) 
{ 
    for (int i = 0; i < numElems; i++) { 
     const MyType& currElem = getElem(i); 
      if (std::none_of(elems.begin(), elems.end(), [](MyType& elem) {return currElem == elem; })) { 
       return false; 
      }  
    } 
    return true; 
} 

컴파일 오류 메시지와 함께 중단 :

디폴트 캡처 모드가 어떻게 여기 뭐가 문제

을 지정하지 않고 되었기 때문에

'currElem'암시 적으로 내가 할 수 캡처 할 수 없습니다 이 문제를 해결 하시겠습니까?

+0

을 downvoted :

[=](MyType& elem) 

또는 참조로

. 다음 번에 물어보기 전에 적어도 Google에 오류 메시지가 표시됩니다. –

답변

2

당신은 하나가 값 (복사본 만들기), 로컬 변수를 캡처하는 방법을 지정해야합니다 : 연구 노력의 부족

[&](MyType& elem) 
+0

Thx! 필자의 경우에는''MyType''이''const''이어야합니다. 그래서''[=] (const MyType & elem)''''[&] (const MyType & elem)''은 완전히 맞습니다. – user1056903

관련 문제