我试图按照这个例子使用lambda remove_if.这是我的尝试:
int flagId = _ChildToRemove->getId();
auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
[](Flag& device) {
return device.getId() == flagId;
});
m_FinalFlagsVec.erase(new_end, m_FinalFlagsVec.end());
Run Code Online (Sandbox Code Playgroud)
但这无法编译:
error C3493: 'flagId' cannot be implicitly captured because no default capture mode has been specified
Run Code Online (Sandbox Code Playgroud)
如何flagId在lambda表达式中包含外部参数?
有人可以提供一些见解吗?lambda是捕获外部变量,还是外部世界捕获lambda产生的值?捕获某个变量意味着什么?
我正在尝试将名称转换为数字。我的问题是,当我尝试在 switch 语句中执行简单操作时,a=a+1我收到错误消息“在未指定捕获默认值的情况下,无法在 lambda 中隐式捕获变量 'a'”
在这里查找相同的错误消息,我发现我应该使用[],[=]或[&]。我的问题似乎更多是如何以及在哪里这样做。如果我去[](int a=0){};初始化变量的地方,那么我的消息是“错误:使用未声明的标识符‘a’”
这是我的问题的代码
#include <jni.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
static int nameToNumber(string fn, string ln)
{
string nameOne = fn;
string nameTwo = ln;
[](int a=0){};
int b = 0;
int num = 0;
for_each(nameOne.begin(), nameOne.end(), [](char &c )
{
c=::toupper(c);
switch (c){
case 'A':
case 'J':
case 'S': a=a+1;
break;
case 'B':
case 'K':
case 'T': …Run Code Online (Sandbox Code Playgroud)