【解决】VSCode编写C++自定义头文件undefined reference异常问题
创始人
2024-02-06 19:44:20
0

最近在使用VSCode编写C++程序过程中,自定义一个 *.h 文件,其中包含了函数声明,在主函数中引入头文件后,调用头文件对应C++文件中的方法,出现了undefined reference问题,这个主要是配置没有正确造成的,具体解决方法如下:

文件具体目录如下:

即头文件夹和cpp文件不在同一个文件夹下

在这里插入图片描述

主函数相关代码如下:

主函数:hello.cpp

#include
using namespace std;
#include ".\test01\.vscode\head\swap.h"int main(){int a=5,b=6;//此为调用头文件中对应的函数swap(a,b);//cout<<"the min"<

头文件:swap.h

#include
using namespace std;void swap(int a,int b);

头文件所对应的cpp文件

#include ".\test01\.vscode\head\swap.h"void swap(int a,int b){int tmp=a;a=b;b=tmp;cout<<"a="<

分析问题出现原因

在代码的编译过程中,可以看一下 VSCode终端下面的编译情况,则发现是因为 swap 没有找到,且没生成 swap.exe 文件,这个主要是 c++ 对应的配置文件的问题,这里我们需要打开 task.json 文件,即目标执行文件

Tips:如果您的目录下没有tasks.json 文件,需要在VSCode工程界面中,按压Ctrl+Shift+p,在弹出的输入框中,输入Tasks后,从提示选单中选择Configure Task,再选择C/C++:gcc.exe build active file,即可在根目录生成 tasks.json 文件,文件的具体内容如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "your g++path\\mingw64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g", "${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}

这里需要按注意的是tasks.json文件中的args参数,实际上就是调用gcc时,后面所跟的参数在初始的配置中,实际上编译器执行的命令为gcc -g hello.cpp -o hello.exe,即只会编译主函数对应的文件,不会编译其他的cpp文件;
而我们需要修改这个配置。具体修改过程如下:

将上面 args 参数中的 “file",−>"{file}", - > "file",−>"{fileDirname}\*.cpp”,

即改完后的 tasks.json为:

{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "your g++path\\mingw64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g", "${fileDirname}\\*.cpp","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}

修改后的配置中,则在编译器中,可以看到,执行的命令是gcc -g hello.cpp swap.cpp -o hello.exe swap.exe,这是由于参数 file代表的是被编译的当前文件,而参数{file} 代表的是被编译的当前文件,而参数file代表的是被编译的当前文件,而参数{fileDirname}\*.cpp 代表的是当前目录下的所有.cpp文件。程序就执行通过了。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...