如何在VSCode C++扩展中启用C++17支持

xtfmy6hx  于 2023-04-01  发布在  Vscode
关注(0)|答案(9)|浏览(494)

我总是在std::string_view上看到错误,但我可以很好地构建。有没有一种方法可以告诉intellisense或C++ linter使用C++17?
我得到的具体错误是:

namespace "std" has no member "string_view"
b5lpy0ml

b5lpy0ml1#

现在这已经变得容易多了。在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的文件夹。

ve7v8dk2

ve7v8dk22#

在他们的GitHub问题追踪器中有一个帖子是关于这个的:std::string_view intellisense missing (CMake, VC++ 2017) .
在另一个问题中,据说扩展默认为C17,但还不支持C17的所有特性:正在设置C标准。
这可以通过c_cpp_properties.json Reference Guide来确认,其中列出了一个选项cppStandard,默认为C
17。(要编辑此文件,请按Ctrl + Shift + P并键入C/CPP: Edit Configurations)。
看来,他们只是还没有得到充分的支持。

vbopmzt1

vbopmzt13#

只是更新了一下,我也收到了这期。
我通过添加c_cpp_properties.json来解决它

  1. Ctrl + Shift + P然后选择C/C++:Edit Configurations (JSON)
    1.调整cStandardcppStandard的内容:
"cStandard": "gnu17",
    "cppStandard": "gnu++17",
6jjcrrmo

6jjcrrmo4#

对于在Linux上试用并安装了GCC 7.5.0的人来说,这对我很有效。

执行这两个步骤,使linter能够确认c17的写入,并使编译器能够拾取c17。
1.打开C/C++:Edit Configurations (JSON),将这两个字段的默认值更改为:
“c标准”:“gnu18”,“cppStandard”:“gnu17”
1.打开.vscode目录中的tasks.json文件,并将以下语句添加到args键:
“--标准品”,“c
17”

bkhjykvo

bkhjykvo5#

如果在尝试了@Marc.2377和@W Kenny的解决方案后仍无法启用,请执行以下操作
1.在.vscode文件夹中打开tasks.json
1.在"args:"下添加"--std","c++17"
1.保存tasks.json

8zzbczxx

8zzbczxx6#

在尝试了很多事情之后,我发现了一个可能的解决方案,适合使用CMake并愿意编辑CMakeLists.txt文件的人。
我只是在CMakeLists.txt的开头放了下面一行
set (CMAKE_CXX_STANDARD 17)
你可以通过执行以下操作来检查你的C版本:cout << __cplusplus ;和第3和第4个数字给出了你正在使用的c的版本。
例如:
cout << __cplusplus ;
201703
表示您正在使用C++ 17

cout << __cplusplus ;
201402
表示您正在使用C++ 14
我想一定有一个更简单的解决办法,但我还没有找到。

ycggw6v2

ycggw6v27#

另外,要在其他帖子中提到的c_cpp_properties.json中将cppStandard设置为gnu++17,您需要将__cplusplus-define更改为相应的值(例如201703L
就像这样:

{
  "version": 4,
  "configurations": [
    {
      // ...
      "cStandard": "gnu17",
      "cppStandard": "gnu++17",
      "defines": [
        // ...
        "__cplusplus=201703L"
        // ...
      ]
    }
  ]
}
jexiocij

jexiocij8#

我试过编辑C_Cpp>Default: Cpp StandardC Standard的设置,将它们指定为C++17 standard。但是,这不起作用。
然后我在我的项目目录中发现了一个.vscode文件夹,其中有一个c_cpp_properties.json文件。在那里我发现了我没有编辑的设置,在那里我指定使用C++11 standard。当我更改它时,我发现问题消失了。
如果你发现上面的答案不起作用,也许我们犯了同样的错误。

lpwwtiir

lpwwtiir9#

在命令行上使用g++ --version检查你的g++版本。如果它像版本6或7,那么你需要用mingw更新到一个新版本。我使用mysys2来做这件事,现在我没有同样的问题。

相关问题