【解决】VSCode编写C++自定义头文件undefined reference异常问题

news2025/1/11 16:46:56

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

文件具体目录如下:

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

在这里插入图片描述

主函数相关代码如下:

主函数:hello.cpp

#include<iostream>
using namespace std;
#include ".\test01\.vscode\head\swap.h"

int main(){
    int a=5,b=6;
    //此为调用头文件中对应的函数
    swap(a,b);
    //cout<<"the min"<<min<<endl;
    system("pause");
    return 0;
}

头文件:swap.h

#include<iostream>
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="<<a<<endl;
    cout<<"b="<<b<<endl;
}

分析问题出现原因

在代码的编译过程中,可以看一下 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 参数中的 “ f i l e " , − > " {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,这是由于参数 f i l e 代 表 的 是 被 编 译 的 当 前 文 件 , 而 参 数 {file} 代表的是被编译的当前文件,而参数 file{fileDirname}\*.cpp 代表的是当前目录下的所有.cpp文件。程序就执行通过了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git——分支(详细解释)

目录 一、概念 1.1 服务器运行模式 1.2 分支概念 1.3 分支的好处 二、分支相关操作 2.1 分支操作 2.2 查看当前分支 2.3 创建分支 2.4 切换分支 2.4.1 切换分支 2.4.2 修改代码并提交&#xff08;完整过程&#xff09; 三、合并分支 3.1 正常合并 3.2 冲突合并&#xff…

DGL学习笔记——第一章 图

提示&#xff1a;DGL用户指南学习中 文章目录一、关于图的基本概念&#xff1f;二、图、节点和边三、节点和边的特征四、从外部源创建图1、从Scipy稀疏矩阵中构建图示例2、从networkx中构建图示例3、从csv中构建图结构总结一、关于图的基本概念&#xff1f; 图是用以表示实体及…

【推荐系统学习笔记】-- 1、推荐系统架构

根本解决的问题&#xff1a;在信息过载的情况下&#xff0c;用户如何高效获取感兴趣的信息。 1 逻辑架构 推荐系统要处理的问题就可以被形式化地定义为&#xff1a;对于某个用户U&#xff08;User&#xff09;&#xff0c;在特定场景C&#xff08;Context&#xff09;下&…

区块链 - 各个国家Web3的现状与趋势

​潜力博主推荐&#xff0c;点上面关注博主↑↑↑ 2022年&#xff0c;元宇宙、NFT 、GameFi、DAO、DeFi 等 Web3 时代的新生事物&#xff0c;正在彻底改写传统商业模式&#xff0c;重塑全球数字商业的版图&#xff0c;一个全新的数字时代正在开启。 美国、欧洲官方开始在 Web…

【构建ML驱动的应用程序】第 4 章 :获取初始数据集

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

C语言——指针初阶详解

&#x1f412;博客名&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 目录 1. 指针是什么 2. 指针和指针类型 2.1指针类型的第一个意义 2.2指针类型的第二个意义 3. 野指针 3.1 野指针成因 3.2 如何…

零基础自学javase黑马课程第十六天

零基础自学javase黑马课程第十六天 ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&#x1f39e;2022年11月21日&…

三菱FX3U——ST编程点动与自锁

通过赋值 : 操作符&#xff0c;可以控制元件的状态&#xff1b; Y0:1&#xff0c;使Y0得电&#xff0c; Y0:0,使Y0失电&#xff1b; Y0:TRUE,使Y0得电&#xff0c; Y0:FALSE,使Y0失电; Y2:M0,通过M0的状态来控制Y2&#xff1b; NOT 取反操作&#xff0c; 状态取反&#xff…

活动现场大屏幕互动系统(微信墙)修复版完美PHP源码,带完整素材包和详细使用文档

源码收集于网络&#xff0c;觉得不错&#xff0c;2022-11-18亲测了源码&#xff0c;顺手修复了原来的几处bug。网上的这个源码有个重大bug&#xff0c;就是后台系统配音没法上传音乐文件。我理了一下代码&#xff0c;修复了这个问题&#xff0c;现在后台可以分别给每个模块上传…

CTFHub技能树 Web-文件上传详解

文章目录0x01 无验证0x02 前端验证0x03 .htaccess0x04 MIME绕过0x05 00截断0x06 双写后缀0x07 文件头检查0x08 其他摘抄0x01 无验证 介绍&#xff1a;直接上传后缀是php的文件即可 文件上传 <?php eval($_POST[777]);?> 进行连接 查找flag 0x02 前端验证 介…

智慧住建解决方案-最新全套文件

智慧住建解决方案-最新全套文件一、建设背景目前智慧住建的信息化现状&#xff1a;1、系统重叠建设&#xff0c;标准规范不统一2、信息应用水平不均衡&#xff0c;资源共享待提升3、应用系统众多&#xff0c;用户操作体验不佳4、原有架构难以适应“互联网”的新要求二、总体设计…

计算机中的第三个伟大发明

本节我们学习了控制计算机跳转指令的第三个发明的由来&#xff0c;以及清除指令。并且展示了计算机的整体控制部分的布线图。 第三个发明 对于跳转指令&#xff0c;有时它会跳转&#xff0c;有时不会。跳或不跳只是两种可能性&#xff0c;所以只需要一个bit就可以确定哪一种会…

【Kubernetes快速实战】

K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 文章目录前言一、K8S核心特性二、K8S集群安装1.安装K8S集群1、关闭防火墙2、关闭 selinux3、关闭 swap4、给三台机器分别设置主机名5、在 k8s‐master机器添加hosts&#xff0c;执行如下命令&#xff0c;ip需要修改…

全球最受欢迎的「数字游民」城市竟然是它?

相信你已经或多或少听说过「数字游民」这个词汇了。 「数字游民」译自英文词组Digital Nomad&#xff0c;是指那些没有办公室等固定工作场所&#xff0c;利用互联网从事远程工作&#xff0c;实现地域和时间的相对自由&#xff0c;在全球范围内移动生活的人群。 想想看&#x…

STM32实战总结:HAL之电机

电机基础知识参考&#xff1a; 51单片机外设篇&#xff1a;电机_路溪非溪的博客-CSDN博客 无刷电机和有刷电机 先详细了解有刷电机&#xff1a; 带你了解&#xff08;有刷&#xff09;电机工作原理_哔哩哔哩_bilibili 再详细了解无刷电机&#xff1a; 无刷直流电机工作原理_哔哩…

MySQL在centos上的安装

去mysql官网下载mysql 通过mysql官网的download界面&#xff0c;找到community server&#xff0c;然后选择对应linux版本下载对应的安装包 这里直接上链接 https://downloads.mysql.com/archives/community/ 可以通过cat /etc/centos-release命令找到当前centos对应的版本 下…

[附源码]java毕业设计小区供暖收费管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

重磅上市《精通Neo4j》

重磅上市《精通Neo4j》重磅上市《精通Neo4j》一、写在前面的话二、主要内容三、更多介绍Here’s the table of contents:重磅上市《精通Neo4j》 《精通Neo4j》是继《Neo4j权威指南》之后第二本由中国人原创的图数据库领域专业书籍。由清华大学出版社于2022年11月出版&#xff0…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-步长的进一步理解和max_iter

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 既然参数迭代是靠梯度向量的大小d步长α梯度向量的大小d \times步长\alpha梯度向量的大小d步长α来实现的&#xff0c;而J(θ)J(\theta)J(θ)的降…

群推王|如何引爆您的推特流量

推特营销主要吸引力在于其庞大的用户群体。它是最大的社交媒体平台之一&#xff0c;据统计每月有3.3亿活跃用户&#xff0c;为品牌知名度和增长做出了重大贡献。 尽管我们都知道推特营销的重要性&#xff0c;但是在实际运用上大家可能会遇到一些问题&#xff0c;比如您有很多粉…