引用个人编写的文件出现no such file以及undefine reference ...

问题描述:

  1. vs code引用.h文件找不到:no such file
  2. 找到.h文件后,会出现undefined reference to xxxxxx

解决方法 .h的no such file

include里加相对路径是可以的,但是会出现未定义的问题:
image.png
但是includepath里加这个反而没用
配置/C++并添加非工作区头文件:https://www.cnblogs.com/didea/p/9853620.html
参考以上帖子,需要
(1)在c_cpp_properties.json中添加头文件路径。
(2)在tasks.json中修改命令行参数

流程

只在c_cpp_properties.json中添加头文件路径,并不会有用,

image.png
依然会出现以下报错:
image.png

在tasks.json中添加链接库

"-g"产生调试信息,
"-c"编译中间目标文件,
"-I"指定链接库,
"-o"生成指定命名的可执行文件
只动态链接include库以及出现以上报错
image.png
加入cpp部分也是以上报错
image.png
在产生调试信息后加上也依旧是以上报错
image.png
一条条在includepath上注释后发现vs code是可以识别到json.h的:
image.png
在该种情况下,json.h也可以被识别到,这说明是没用编译的原因,main.cpp。
但是修改了-g后面的内容没用反应,image.png实现上还是没有运行json.cpp

将main文件放到同个文件夹中,然后手动编译运行,运行成功

说明问题在于没办法读取其他文件夹中的文件以及无法编译其他文件夹的文件

所以搜索单文件编译与多文件编译的内容,
参考:https://blog.csdn.net/kuangwei_/article/details/106819439
还是在task.json中处理

单文件编译与多文件编译

单文件夹中单文件编译与多文件编译

在task.json文件中,”args“部分:
image.png
${fileDirname}\*.cpp //将当前路径下的所有cpp文件都进行了编译
在改为** ${file} **之后,则是等同于在命令行里执行了 g++ file.cpp

变量名含义
${workspaceRoot}当前打开的文件夹的绝对路径+文件夹的名字
${workspaceRootFolderName}当前打开的文件夹的名字
${file}当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名
${relativeFile}从当前打开的文件夹到当前打开的文件的路径
如 当前打开的是test文件夹,当前的打开的是main.c,并有test/first/second/main.c
那么此变量代表的是 first / second / main.c
${fileBasename}当前打开的文件名+后缀名,不包括路径
${fileBasenameNoExtension}当前打开的文件的文件名,不包括路径和后缀名
${fileDirname}当前打开的文件所在的绝对路径,不包括文件名
${fileExtname}当前打开的文件的后缀名
${cwd}任务开始运行时的当前工作目录
${lineNumber}当前打开的文件,光标所在的行数

多文件夹下单文件与多文件编译

分析

1、c_cpp_properties.json一般用于添加包含路径,方便程序员编写代码时直接引用外部文件。该文件对编写代码有用,引用文件时不会提示错误,但对运行代码用处不大。
2、launch.json和tasks.json用于调试运行代码。
3、settings.json是runcode的配置文件,用于直接点击运行代码。

实现

链接其他文件夹中的include文件

  1. 在a.cpp 文件中要引用其他文件夹的 b.h 需要在c_cpp_properties.json -> configurations -> includePath添加a1.h所在文件夹路径。
  2. 但是由于二者不在同一文件夹中,调试时,先不要动态链接b.h的文件夹路径
  3. 同理在setting.json中加入b.h的路径

image.png
以上效果和引用相对路径效果一样

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值