一 问题描述
在环境配置没有问题的前提下创建了c++project,主程序不包含其他目录下的程序情况下使用快捷键编译可以正常编译成功并生成可执行文件,但是包含了其他目录下的文件以后就会报错。该文章就是为了解决这种包含了其他目录文件情况下无法使用快捷键编译的问题。
二 前提,安装MinGw环境:
https://code.visualstudio.com/docs/cpp/config-mingw
三 问题复现
在桌面建立一个project文件,文件夹组成如下:
1 新建工作空间文件夹:workspace;
2 进入workspace文件夹新建src;
3 进入src,新建project;
4 进入project后再新建一个hiworld文件夹。
使用vscode打开该文件夹:如图
workspace目录树
5 在各个目录新建测试文件:
测试程序文件分布
mian.cpp
#include "hiworld/hi.h" int main(int argc, const char** argv) { std::cout<<"hdsjhdk"<<std::endl; HI hh; return 0; }
hi.h
#pragma once #include<iostream> class HI { private: /* data */ public: HI(/* args */); ~HI() = default; };
hi.cpp
#include "hi.h" HI::HI(){ std::cout<<"this is a hi class !"<<std::endl; }
6 至此会出现的错误(非本文关注重点)
按照上述操作建立完成程序文件以后会提示无法找到c++一些的函数(头文件出现红色波浪线)。
报错提示
这问题是因为没有为程序配置c++编译环境,解决方法如下:
- ctrl+shift+p,选择select intellisence configuration;
ctrl+shift+p后出现的
- 然后选择g++对应的编译环境;
选择use g++.exe
- 按照上述操作以后程序中包含的库函数就不会再出现红色波浪线的错误
配置好后会出现的文件夹和jason文件
7 使用快捷键编译程序(会出错)
点击main.cpp 在main.cpp文件下开始编译程序。
在上图状态下选择最右侧的运行键选择第三个配置g++编译器
选择g++编译器进行编译
错误出现
函数未定义
按照上述的操作就会出现函数未定义的情况,但是这些函数我们在编码过程中都进行了实现。上述流程是建立一个c++project会有的。但是在vscode中如果使用快捷键编译就一定会报错。
四 解决方法
- 错误原因:快捷键进行编译时会默认生成一个tasks.json文件,但该文件中的编译命令只包含了main.cpp,没有包含其他文件下需要的.cpp文件,所以才会出现函数未定义的情况。
- 解决办法:找到需要包含的cpp文件,并复制它的路径,加入tasks.json中。
路径复制
路径粘贴
按照上述操作把路径添加到tasks.json中对应的地方并保存,而且粘贴的路径中用的是“\\”。
- 编译运行:再次尝试编译运行程序,可以看到正常的打印出了main中的信息以及其他文件中实现时输出的打印信息.
最终结果
五 总结
一句话:出现上述快捷键编译无法通过且提示undefined reference ***的情况,把对应cpp文件的路径复制后粘贴到tasks.json下的"${file}"与“-o”之间就可以了。