VSCode 编写 C++ (.h,.cpp 文件分离)代码,编写完成后,编译遇到了编译错误 undefined reference to xxx。
开始还以为使用了 -std=c++20 而不能使用 #include “xxx.h" 方式头文件,但仔细一想虽然引入了 import,也不至于向前兼容都成了问题。
接着觉得可能是没有编译全部的 .cpp
文件,只编译了当前执行的 main.cpp
文件,导致找不到对应的类。试着 #include ”xxx.cpp",就解决了问题,但也不能这样改呀,是不。
这时问题已经明了了,在 tasks.json 文件里配置了单文件编译,问题就出在这里。修改tasks.json
文件中args
栏的 ${file}
为 ${fileDirname}\\*.cpp
。
至此,问题解决。
配置多 tasks,并设置快捷键:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "GCC Compile Multi-Cpps",
"command": "C:\\CplusEnv\\mingw64\\bin\\g++.exe",
"args": [
"-std=c++20",
"-fdiagnostics-color=always",
"-g",
//"${file}", // 编译当前打开(编辑)的 .cpp 文件
"${fileDirname}/*.cpp", // 编译当前打开的文件所在目录下的所有.cpp 文件
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: C:\\CplusEnv\\mingw64\\bin\\g++.exe"
},
{
"type": "cppbuild",
"label": "GCC Compile Single-Cpp",
"command": "C:\\CplusEnv\\mingw64\\bin\\g++.exe",
"args": [
"-std=c++20",
"-fdiagnostics-color=always",
"-g",
"${file}", // 编译当前打开(编辑)的 .cpp 文件
//"${fileDirname}/*.cpp", // 编译当前打开的文件所在目录下的所有.cpp 文件
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
//"isDefault": true
},
"detail": "compiler: C:\\CplusEnv\\mingw64\\bin\\g++.exe"
},
]
}
配置快捷键:
// Place your key bindings in this file to override the defaults
[
{
"key": "ctrl+1", // 配置快捷键
"command": "workbench.action.tasks.runTask", // runtask
//"args": "GCC Compile Multi-Cpps" // task 的名称,对应定义的label,不定义更换,可以弹框选择对应的task
},
{
"key": "ctrl+2",
"command": "workbench.action.tasks.runTask",
"args": "GCC Compile Single-Cpp"
}
]
按 ctrl+1 后出现
按 ctrl+2 直接以单文件方式编译。
为什么只编译不运行呢?等待后续解决。