【问题标题】:How to enable C++17 support in VSCode C++ Extension如何在 VSCode C++ Extension 中启用 C++17 支持
【发布时间】:2021-03-30 16:54:06
【问题描述】:

我不断在 std::string_view 上收到错误曲线,但我能够构建得很好。有没有办法告诉智能感知或 C++ linter 使用 C++17?

我得到的具体错误是:

namespace "std" has no member "string_view"

【问题讨论】:

标签: c++ visual-studio-code c++17 vscode-settings


【解决方案1】:

现在这变得容易多了。在您的 vs 代码扩展设置中搜索 cppstandard,然后从下拉列表中选择您希望扩展使用的 C++ 版本。

为了确保您的调试器使用相同的版本,请确保您的tasks.json 具有类似的内容,其中重要的行是--std,之后的行定义了版本。

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++ build active file",
      "command": "/usr/bin/g++",
      "args": [
        "--std",
        "c++17",
        "-I",
        "${fileDirname}",
        "-g",
        "${fileDirname}/*.cpp",
        "-o",
        "${workspaceFolder}/out/${fileBasenameNoExtension}.o"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ],
  "version": "2.0.0"
}

请注意,如果您要直接复制上述tasks.json,则需要在工作区根目录中有一个名为out 的文件夹。

【讨论】:

【解决方案2】:

在他们的 GitHub 问题跟踪器中有一篇关于此的帖子:std::string_view intellisense missing (CMake, VC++ 2017)

在另一个问题上,据说扩展默认为C++17,但还不支持所有C++17特性:Setting C++ standard

c_cpp_properties.json Reference Guide 确认了这一点,其中列出了一个选项cppStandard,默认为 C++17。 (要编辑此文件,请按 Ctrl + Shift + P 并输入C/CPP: Edit Configurations

看来,他们只是还没有得到完全的支持。

【讨论】:

  • 这就是我所担心的。我也看到了 github 问题,但似乎最初帖子的响应者无法重现该问题。
  • 有趣的是,我的设置为 c++17,但仍然找不到 <optional> :angry:
  • @DrumM 这正是我想要的,。我可以编译,但是 VS Code 给我的曲线很烦人。哦,好吧。
  • 更新:我找到了解决办法。根据“设置 C++ 标准”链接的建议,我尝试将 -std=C++17 放入 msvc.json 的“默认值”部分,但没有成功。问题是我把它放在错误的文件中。我更改了 Windows 用户文件夹中 .vscode 文件夹中的文件,但我在 WSL 中使用 VS Code,因此我必须编辑 WSL 用户文件夹的 .vscode 文件夹中的 msvc.json 文件。当我这样做时,红色波浪形消失了!
  • 我没有看到任何关于msvc.json 文件的文档,只有c_cpp_properties.json。为什么后者不够?
【解决方案3】:

只是一个更新。我也遇到了这个问题。

我通过添加c_cpp_properties.json来解决它

  1. Ctrl + Shift + P 然后选择C/C++:Edit Configurations (JSON)

  2. 调整cStandardcppStandard的内容:

        "cStandard": "gnu17",
        "cppStandard": "gnu++17",
    

【讨论】:

    【解决方案4】:

    如果您尝试了@Marc.2377@W Kenny 的解决方案后仍无法启用,请执行以下操作

    1. .vscode 文件夹中打开tasks.json
    2. "args:"下添加"--std","c++17"
    3. 保存tasks.json

    【讨论】:

    • 这将改变编译器的工作方式,而不是 linter
    • 为我工作。 Linux、VS 代码、C++17。谢谢。
    【解决方案5】:

    对于尝试在 Linux 上安装 GCC 7.5.0 的人来说,这对我有用。
    执行这两个步骤以使 linter 能够确认 c++17 的文字并让编译器拾取 c++17。

    1. 打开C/C++:Edit Configurations (JSON),并将这两个字段的默认值更改为:

    “cStandard”:“gnu18”,“cppStandard”:“gnu++17”,

    1. 打开.vscode目录下的tasks.json文件,在args键中加入以下语句:

    "--std", "c++17"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 2021-01-23
      • 2016-12-29
      相关资源
      最近更新 更多