欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版

VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版

2024/10/25 14:16:08 来源:https://blog.csdn.net/beyourself_he/article/details/143195858  浏览:    关键词:VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版

分文件编写遇到的问题

分文件编写例子如下所示:
在这里插入图片描述
但是直接使用 Run Code 或者 调试C/C++文件 会报错如下:

  • 正在执行任务: C/C++: g++.exe 生成活动文件
    正在启动生成…
    cmd /c chcp 65001>nul && D:\Librarys\mingw64\bin\g++.exe -fdiagnostics-color=always -g “E:\VSCode Projects\main.cpp” -o “E:\VSCode Projects\main.exe”
    D:/Librarys/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/13.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: C:\Users\beyou\AppData\Local\Temp\cc05WNEh.o: in function main': E:/VSCode Projects/main.cpp:9: undefined reference toswap(int, int)’
    collect2.exe: error: ld returned 1 exit status
    生成已完成,但出现错误
    终端进程已终止,退出代码: -1。
    终端将被任务重用,按任意键关闭。

解决办法

vscode 的 .vscode 的配置遵循父类文件夹优先的原则,也就是说父文件夹的 .vscode 和子文件夹的 .vscode ,优先访问父文件夹

最原始的 tasks.json 内容为这样,它只适合于单文件生成,也就是你把所有的代码写在一个 .cpp 文件里面。如果你在你的项目文件夹下新建子文件夹,再把你的代码文件移动到子文件夹下,对于你这种单文件而言,下面的内容仍然不用改变。也能正常编译运行。(因为 fileDirname 就是装你的代码文件所在的位置)

            "args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],

对于分文件编写的程序,需要改 tasks.json 里面的东西为下面的样子,同理,这样已经是正确的了,即使你递归地建了100个子文件夹把程序放在里面,下面的路径也不需要从根文件夹 \\ 到 100 个子文件夹后的位置。也就是说,只要是分文件编写的项目,按下面这样写就行了。(因为 fileDirname 就是装你的代码文件所在的位置)

            "args": ["-fdiagnostics-color=always","-g","${fileDirname}\\*.cpp","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],

之后使用 调试C/C++文件运行C/C++文件 都没有问题,但是 Run Code 会报错,别管 Run Code ,这个修改很复杂,而且违背初心了,原因如下:

大型项目使用 调试C/C++文件,不要选择 Run Code,因为 Run Code 是一个快捷工具,主要由 Code Runner 插件提供。它执行一个预定义的命令,通常是针对单个文件进行快速编译和运行。调试C/C++文件 运行的是 VSCode 的 任务构建系统,这需要通过 tasks.json 文件进行配置。所以我们可以在里面灵活地修改。

其实最好还是了解 c++ 编译过程,会对上面为什么这样写有更深的感悟,但是小白可能只想着快点解决错误。


特别鸣谢:bmg的远程操作与指导
特别批评:QuantumDusk的不作为

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com