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

news/2024/7/16 8:22:30 标签: vscode, c++, ide

最近在使用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.niftyadmin.cn/n/1472748.html

相关文章

[NOIP·2011普及组] 瑞士轮

【背景】 在双人对决的竞技性比赛&#xff0c;如乒乓球、羽毛球、国际象棋中&#xff0c;最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少&#xff0c;每场都紧张刺激&#xff0c;但偶然性较高。后者的特点是较为公平&#xff0c;偶然性较低&#xff0c;但比赛过程往往十…

【解决】Ubuntu系统下VSCode终端字体间隔偏大

问题描述&#xff1a;本人使用的操作系统未Ubuntu&#xff0c;使用VSCode写程序过程中&#xff0c;发现终端中的文字间隔较大&#xff0c;非常影响我们的正常观看&#xff0c;这个问题的解决方法如下&#xff0c; 先来个我调整后的状态&#xff1a; 可以看到以上的情况是正常的…

自定义单选框和复选框

效果如下&#xff1a; html代码&#xff1a; <div class"form-inline"> <div class"radio-wrap"> <label class"radio"><input type"radio&…

【ROS解决】Unable to register with master node [http://ipaddress:11311/]: master may not be running yet

问题描述 在使用 rospy 编程过程中&#xff0c;编写的python程序出现了下面的问题&#xff0c;一直卡着不动了。 【注&#xff1a;这里的localhost可能是你自己设置的机器人节点等一些自定义IP地址】 一开始&#xff0c;我还以为是python编译器出了问题&#xff0c;我尝试了 p…

linux下gzip的压缩详解

Linux压缩保留源文件的方法&#xff1a; gzip -c filename > filename.gz Linux解压缩保留源文件的方法&#xff1a; gunzip -c filename.gz > filename gunzip的用法1.作用 gunzip命令作用是解压文件&#xff0c;使用权限是所有用户。 2.格式 gunzip [-acfhlLnNqrtvV][-…

面试经常问的一个问题:final、finalize、finally

http://m.blog.csdn.net/u010980446/article/details/51493658 转载于:https://www.cnblogs.com/lchzls/p/7333750.html

wordpress学习(二)

学习如何使用wpdb<br/><? global $wpdb; //声明wpdb类 $wpdb->show_errors();//1.学会向数据库中数据表添加一行数据(增) //参数一&#xff1a;数据表名&#xff1b;参数二&#xff1a;数据&#xff1b;参数三&#xff1a;数据格式&#xff08;可以不写&#xff…

【记录】Ubuntu20.04如何使用中文输入法

安装完Ubuntu系统&#xff0c;发现中文输入法不能用&#xff0c;这里记录下使用中文输入法的过程。 1 打开 setting 2 页面左侧的导航栏中选择“Region&Language”&#xff0c;然后在右侧页面中点击“Manage Install Languages”。 如果弹出下面这个窗口&#xff0c;单击 …