2016-10-08 10 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を研究努力の不足のために。次回に尋ねる前に、少なくともGoogleにエラーメッセージを送ります。 –

答えて

2

あなたはローカル変数をキャプチャする方法を指定する必要があり、どちらかの値で(コピーを作成):

[=](MyType& elem) 

または参照によって:

[&](MyType& elem) 
+0

Thx!私の場合、 '' MyType''は '' const''でなければなりません。 '' [=](const MyType&elem) '' '' [&](const MyType&elem) ''は完全に正しいです。 – user1056903

関連する問題