由于Lambda函数,编译失败

Compilation fails because of Lambda function

本文关键字:编译 失败 函数 Lambda 由于      更新时间:2023-10-16

给定一个模板函数,用于检查容器(由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'不能隐式捕获,因为没有默认捕获模式已指定

这里有什么问题,我该如何解决这个问题?

您需要指定如何捕获局部变量,或者通过值(创建副本):

[=](MyType& elem)

或通过引用:

[&](MyType& elem)