我总是在std::string_view上看到错误,但我可以很好地构建。有没有一种方法可以告诉intellisense或C++ linter使用C++17?我得到的具体错误是:
namespace "std" has no member "string_view"
b5lpy0ml1#
现在这已经变得容易多了。在vs代码扩展设置中搜索cppstandard,然后从下拉列表中选择您希望扩展使用的C++版本。
cppstandard
为了确保您的调试器使用相同的版本,请确保您的tasks.json具有类似以下内容,其中重要的行是--std,后面的行定义了版本。
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的文件夹。
out
ve7v8dk22#
在他们的GitHub问题追踪器中有一个帖子是关于这个的:std::string_view intellisense missing (CMake, VC++ 2017) .在另一个问题中,据说扩展默认为C17,但还不支持C17的所有特性:正在设置C标准。这可以通过c_cpp_properties.json Reference Guide来确认,其中列出了一个选项cppStandard,默认为C17。(要编辑此文件,请按Ctrl + Shift + P并键入C/CPP: Edit Configurations)。看来,他们只是还没有得到充分的支持。
cppStandard
C/CPP: Edit Configurations
vbopmzt13#
只是更新了一下,我也收到了这期。我通过添加c_cpp_properties.json来解决它
c_cpp_properties.json
C/C++:Edit Configurations (JSON)
cStandard
"cStandard": "gnu17", "cppStandard": "gnu++17",
6jjcrrmo4#
对于在Linux上试用并安装了GCC 7.5.0的人来说,这对我很有效。
执行这两个步骤,使linter能够确认c17的写入,并使编译器能够拾取c17。1.打开C/C++:Edit Configurations (JSON),将这两个字段的默认值更改为:“c标准”:“gnu18”,“cppStandard”:“gnu17”1.打开.vscode目录中的tasks.json文件,并将以下语句添加到args键:“--标准品”,“c17”
.vscode
args
bkhjykvo5#
如果在尝试了@Marc.2377和@W Kenny的解决方案后仍无法启用,请执行以下操作1.在.vscode文件夹中打开tasks.json1.在"args:"下添加"--std","c++17"1.保存tasks.json
"args:"
"--std","c++17"
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我想一定有一个更简单的解决办法,但我还没有找到。
CMakeLists.txt
set (CMAKE_CXX_STANDARD 17)
cout << __cplusplus ;
201703
201402
ycggw6v27#
另外,要在其他帖子中提到的c_cpp_properties.json中将cppStandard设置为gnu++17,您需要将__cplusplus-define更改为相应的值(例如201703L)就像这样:
gnu++17
__cplusplus
201703L
{ "version": 4, "configurations": [ { // ... "cStandard": "gnu17", "cppStandard": "gnu++17", "defines": [ // ... "__cplusplus=201703L" // ... ] } ] }
jexiocij8#
我试过编辑C_Cpp>Default: Cpp Standard和C Standard的设置,将它们指定为C++17 standard。但是,这不起作用。然后我在我的项目目录中发现了一个.vscode文件夹,其中有一个c_cpp_properties.json文件。在那里我发现了我没有编辑的设置,在那里我指定使用C++11 standard。当我更改它时,我发现问题消失了。如果你发现上面的答案不起作用,也许我们犯了同样的错误。
C_Cpp>Default: Cpp Standard
C Standard
C++17 standard
C++11 standard
lpwwtiir9#
在命令行上使用g++ --version检查你的g++版本。如果它像版本6或7,那么你需要用mingw更新到一个新版本。我使用mysys2来做这件事,现在我没有同样的问题。
g++ --version
9条答案
按热度按时间b5lpy0ml1#
现在这已经变得容易多了。在vs代码扩展设置中搜索
cppstandard
,然后从下拉列表中选择您希望扩展使用的C++版本。为了确保您的调试器使用相同的版本,请确保您的
tasks.json
具有类似以下内容,其中重要的行是--std
,后面的行定义了版本。请注意,如果您直接复制上面的
tasks.json
,则需要在工作区根目录中创建一个名为out
的文件夹。ve7v8dk22#
在他们的GitHub问题追踪器中有一个帖子是关于这个的:std::string_view intellisense missing (CMake, VC++ 2017) .
在另一个问题中,据说扩展默认为C17,但还不支持C17的所有特性:正在设置C标准。
这可以通过c_cpp_properties.json Reference Guide来确认,其中列出了一个选项
cppStandard
,默认为C17。(要编辑此文件,请按Ctrl + Shift + P并键入C/CPP: Edit Configurations
)。看来,他们只是还没有得到充分的支持。
vbopmzt13#
只是更新了一下,我也收到了这期。
我通过添加
c_cpp_properties.json
来解决它C/C++:Edit Configurations (JSON)
1.调整
cStandard
和cppStandard
的内容:6jjcrrmo4#
对于在Linux上试用并安装了GCC 7.5.0的人来说,这对我很有效。
执行这两个步骤,使linter能够确认c17的写入,并使编译器能够拾取c17。
1.打开
C/C++:Edit Configurations (JSON)
,将这两个字段的默认值更改为:“c标准”:“gnu18”,“cppStandard”:“gnu17”
1.打开
.vscode
目录中的tasks.json
文件,并将以下语句添加到args
键:“--标准品”,“c17”
bkhjykvo5#
如果在尝试了@Marc.2377和@W Kenny的解决方案后仍无法启用,请执行以下操作
1.在
.vscode
文件夹中打开tasks.json
1.在
"args:"
下添加"--std","c++17"
1.保存
tasks.json
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
我想一定有一个更简单的解决办法,但我还没有找到。
ycggw6v27#
另外,要在其他帖子中提到的
c_cpp_properties.json
中将cppStandard
设置为gnu++17
,您需要将__cplusplus
-define更改为相应的值(例如201703L
)就像这样:
jexiocij8#
我试过编辑
C_Cpp>Default: Cpp Standard
和C Standard
的设置,将它们指定为C++17 standard
。但是,这不起作用。然后我在我的项目目录中发现了一个
.vscode
文件夹,其中有一个c_cpp_properties.json
文件。在那里我发现了我没有编辑的设置,在那里我指定使用C++11 standard
。当我更改它时,我发现问题消失了。如果你发现上面的答案不起作用,也许我们犯了同样的错误。
lpwwtiir9#
在命令行上使用
g++ --version
检查你的g++版本。如果它像版本6或7,那么你需要用mingw更新到一个新版本。我使用mysys2来做这件事,现在我没有同样的问题。