VSCode配置C++20失败求助,附代码及相关配置文件
VSCode中C++20环境配置失败问题排查
问题描述
在CMD中执行g++ Main.cpp -std=c++20 && .\a可正常编译运行含C20特性的代码,但VSCode中编译时出现std::ranges、std::to_array未识别的错误,C17程序可正常运行,已配置tasks.json、settings.json、launch.json及c_cpp_properties.json文件,寻求解决办法。
测试代码
//Main.cpp #include <iostream> #include <ranges> #include <algorithm> #include <array> namespace rg = std::ranges; int main() { auto arr = std::to_array({12, 8, 3, 7}); rg::sort(arr); for (size_t i = 0; i < arr.size(); ++i) { if (i != 0) std::cout << ", "; std::cout << arr[i]; } std::cout << "\n\n" << __cplusplus; //this will return the version of C++ }
CMD运行结果
3, 7, 8, 12 202002
VSCode编译错误
if ($?) { g++ 1.cpp -o 1 } ; if ($?) { .\1 } 1.cpp:5:21: error: 'ranges' is not a namespace-name 5 | namespace rg = std::ranges; | ^~~~~~ 1.cpp: In function 'int main()': 1.cpp:9:21: error: 'to_array' is not a member of 'std' 9 | auto arr = std::to_array({12, 8, 3, 7}); | ^~~~~~~~ 1.cpp:9:21: note: 'std::to_array' is only available from C++20 onwards 1.cpp:11:5: error: 'rg' has not been declared 11 | rg::sort(arr); | ^~
配置文件
tasks.json
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\msys64\\ucrt64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "--std", "c++20", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "compiler: C:\\msys64\\ucrt64\\bin\\g++.exe" } ] }
settings.json
{ "C_Cpp.default.cppStandard": "c++20", "C_Cpp.default.cStandard": "c17", "C_Cpp.default.compilerPath": "C:\\msys64\\ucrt64\\bin\\gcc.exe", "files.associations": { "array": "cpp", "atomic": "cpp", "bit": "cpp", "*.tcc": "cpp", "cctype": "cpp", "clocale": "cpp", "cmath": "cpp", "compare": "cpp", "concepts": "cpp", "cstddef": "cpp", "cstdint": "cpp", "cstdio": "cpp", "cstdlib": "cpp", "cwchar": "cpp", "cwctype": "cpp", "deque": "cpp", "string": "cpp", "unordered_map": "cpp", "vector": "cpp", "exception": "cpp", "algorithm": "cpp", "functional": "cpp", "iterator": "cpp", "memory": "cpp", "memory_resource": "cpp", "numeric": "cpp", "optional": "cpp", "random": "cpp", "string_view": "cpp", "system_error": "cpp", "tuple": "cpp", "type_traits": "cpp", "utility": "cpp", "initializer_list": "cpp", "iosfwd": "cpp", "iostream": "cpp", "istream": "cpp", "limits": "cpp", "new": "cpp", "numbers": "cpp", "ostream": "cpp", "ranges": "cpp", "span": "cpp", "stdexcept": "cpp", "streambuf": "cpp", "typeinfo": "cpp", "variant": "cpp" } }
launch.json
{ "version": "0.2.0", "configurations": [ { "name": "C/C++: g++.exe build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe build active file" } ] }
c_cpp_properties.json
{ "configurations": [ { "name": "GCC", "includePath": ["${workspaceFolder}/**"], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "windowsSdkVersion": "10.0.22000.0", "compilerPath": "C:/msys64/ucrt64/bin/g++.exe", "cStandard": "c17", "cppStandard": "c++20", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4 }
解决办法
- 使用正确的编译任务:从错误信息看,编译命令未添加
-std=c++20参数,说明VSCode未使用配置好的tasks.json任务。按Ctrl+Shift+B,选择C/C++: g++.exe build active file执行编译,而非终端默认的简单编译命令。 - 验证编译器一致性:在VSCode终端执行
g++ --version,确认与CMD中使用的是MSYS2 UCRT64版本的g++,避免PATH中存在其他版本编译器导致调用错误。 - 确保配置文件生效:重启VSCode,确认工作区的tasks.json、c_cpp_properties.json被正确加载,而非全局配置。
- 重置IntelliSense缓存:按
Ctrl+Shift+P,执行C/C++: Reset IntelliSense Database,再重新加载窗口,解决IntelliSense识别问题。
内容的提问来源于stack exchange,提问作者Andy James
相关产品推荐
相关产品推荐

