VS Code 中的 Lambda 表达式 C++ 错误

Posted

技术标签:

【中文标题】VS Code 中的 Lambda 表达式 C++ 错误【英文标题】:Error with Lambda Expression C++ in VS Code 【发布时间】:2022-01-20 18:01:45 【问题描述】:

我正在尝试使用 lambda 表达式对 measure 类的数组 m 进行排序,如下所示:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <math.h>

using namespace std;

struct measure
    int day;
    int cow;
    int change;
;


int main()


    int N;
    cin >> N;

    measure m[N];

    for (int i = 0; i < N; i++)
        measure m_i;
        cin >> m_i.day >> m_i.cow >> m_i.change;
        m[i] = m_i;
    

    sort(m, m + N, [](measure a, measure b) return a.day < b.day;);

但是,尝试在 VS Code(使用 C++17)中构建任务时出现错误:

错误:预期的表达式

sort(m, m + N, [](measure a, measure b) return a.day < b.day;);
               ^

生成 1 个错误。

构建完成但出现错误。

我已经在其他编译器上毫无困难地测试了这段代码。为什么 VS Code 会出现这个错误?

【问题讨论】:

无法重现。你用的是 C++98 编译器吗? 那么您可能需要在编译器中启用 C++11 或更高版本。使用“打开 C++11 ”搜索谷歌,这应该可以满足您的需求。另外,如果您像我怀疑的那样使用 g++,请将-pedantic-errors 添加到您的编译命令中,这样它就会在您声明的 VLA 上出错。将该数组更改为std::vector 不要用你自己的话重述编译器信息。剪切和粘贴,完整且未经编辑。 修复了 N 的问题 “我正在使用 C++17 编译器”no you are not 【参考方案1】:

好的,所以看起来你不是用 c++17 编译的。如果我将gcc 版本回滚到4.x 并将标准留给编译器,我可以重现此错误。 Here 是它在旧编译器上的样子。 Here 是它如何在较新的编译器上正常运行。您很可能正在使用c++98c++03 之类的东西。

注意 - 我冒昧地修改了您的代码以使其更像 C++。另外,请停止using namespace std

一个简单的解决方法是确保您使用正确版本的编译器基于您需要的功能。 C++ 中的 Lambda 是在 C++11 中引入的,因此显然您使用的是版本低得多的编译器。

VS Code 没有内置编译器。它使用您已安装的系统编译器。您可以配置使用系统编译器并将标志 --std=c++17 传递给编译器命令行。 gcc 和 clang++ 都支持这个命令行标志。

【讨论】:

OP 使用 VSC,而不是 VS。 已更新。谢谢,

以上是关于VS Code 中的 Lambda 表达式 C++ 错误的主要内容,如果未能解决你的问题,请参考以下文章

C++中的Lambda表达式

C++中的Lambda表达式

C++中的Lambda表达式

C++中的Lambda表达式

C++ 中的 Lambda 表达式

c++的lambda使用注意事项,可能导致的崩溃问题分析