相关疑难解决方法(0)

错误:变量"无法隐式捕获,因为未指定默认捕获模式"

我试图按照这个例子使用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表达式中包含外部参数?

c++ lambda c++11

49
推荐指数
2
解决办法
4万
查看次数

捕捉这个词在lambdas的背景下意味着什么?

有人可以提供一些见解吗?lambda是捕获外部变量,还是外部世界捕获lambda产生的值?捕获某个变量意味着什么?

c++ lambda c++11

21
推荐指数
2
解决办法
1464
查看次数

如果没有使用 switch 语句指定 capture-default,则无法在 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)

c++ c++11

0
推荐指数
1
解决办法
6888
查看次数

标签 统计

c++ ×3

c++11 ×3

lambda ×2