我得到的具体错误是:
namespace "std" has no member "string_view"
namespace "std" has no member "string_view"
现在这变得容易多了。在您的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
的文件夹。std::byte
,这种方法无效。在 VSCode 上仍未找到解决方法,而我们已经到了 2022 年。 - Paprikastd::filesystem
的同样问题。 - desmond13tasks.json
与调试器无关。 - Bulletmagnet他们的GitHub问题跟踪器中有一篇文章涉及此问题: std::string_view智能感知缺失(CMake, VC++ 2017).
在另一个问题中,有人说该扩展默认为C++17,但尚不支持所有C++17功能: 设置C++标准.
这得到了c_cpp_properties.json参考指南的证实,其中列出了一个选项cppStandard
,默认为C++17。 (要编辑此文件,请按Ctrl + Shift + P并输入C/CPP: Edit Configurations
).
因此,看起来他们还没有完全支持。
<optional>
:angry: - jaques-sammsvc.json
文件的任何文档,只有 c_cpp_properties.json
。为什么后者不够用呢? - jaques-sam更新一下,我也遇到了这个问题。
我通过添加 c_cpp_properties.json
文件来解决它。
Ctrl + Shift + P then select C/C++:Edit Configurations (JSON)
Adjust the content for cStandard
and cppStandard
:
"cStandard": "gnu17",
"cppStandard": "gnu++17",
对于在Linux上尝试并安装了GCC 7.5.0的人,这对我有用。
执行以下两个步骤以使linter能够识别c++17编写,并使编译器选择c++17。
C/C++:Edit Configurations (JSON)
,并将这两个字段的默认值更改为:"cStandard": "gnu18", "cppStandard": "gnu++17",
.vscode
目录下的tasks.json
文件,并将以下语句添加到args
键中:"--std", "c++17"
如果您在尝试@Marc.2377和@W Kenny的解决方案后仍无法启用,请按照以下步骤操作:
.vscode
文件夹中打开tasks.json
"args:"
下添加"--std","c++17"
tasks.json
set (CMAKE_CXX_STANDARD 17)
。您可以通过执行以下操作检查您的c++版本:cout << __cplusplus;
第3和第4个数字会给出您正在使用的c++版本。例如:cout << __cplusplus;
201703
表示您正在使用c++ 17,cout << __cplusplus;
201402
表示您正在使用c++ 14。我认为一定有更简单的解决方案,但我还没有找到它。除了在其他帖子中提到的在c_cpp_properties.json
中将cppStandard
设置为gnu++17
之外,您还需要将__cplusplus
定义更改为相应的值(例如201703L
)。
像这样:
{
"version": 4,
"configurations": [
{
// ...
"cStandard": "gnu17",
"cppStandard": "gnu++17",
"defines": [
// ...
"__cplusplus=201703L"
// ...
]
}
]
}
-std
参数,则不需要这个;请参见https://dev59.com/HV8e5IYBdhLWcg3wF3WV,该宏应自动设置。 - Philipp Ludwig我尝试编辑 C_Cpp>Default: Cpp Standard
和 C Standard
的设置,将它们指定为 C++17 标准
。但是,那并没有起作用。
接着我在项目目录下找到了一个 .vscode
文件夹,并进入其中的 c_cpp_properties.json
文件。在里面我发现了一些未编辑的设置,我之前指定使用的是 C++11 标准
。当我更改为正确的标准后,问题就解决了。
如果你发现上述答案不起作用,或许我们犯了相同的错误。
g++ --version
检查您的 g++ 版本。如果它是版本 6 或 7,那么您需要使用 mingw 更新到更新的版本。我使用 mysys2 来完成这个操作,现在我没有同样的问题了。