You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Visual Studio Code中正确链接.cpp文件并解决编译未定义引用错误

在VS Code中编译C++项目时的链接错误解决方法

问题场景

编译C++项目时出现链接错误,错误信息如下:

[main.cpp 2023-04-05 04:55:22.517]
,,C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\MyName\AppData\Local\Temp\ccWOnMhK.o:main.cpp:(.text+0x18): undefined reference to `Aux_main::Aux_main()'
collect2.exe: error: ld returned 1 exit status

项目包含以下文件:

  • main.cpp
  • Aux_main.h
  • Aux_main.cpp
  • Pessoa.cpp
  • Pessoa.h

各文件代码如下:

main.cpp

int main(){

    Aux_main Objeto_Aux_main;

    return 0;

}

Aux_main.h

#include "Pessoa.h"

#ifndef AUX_MAIN_H
#define AUX_MAIN_H

class Aux_main{
    
    private:
        Pessoa Einstein;
        Pessoa Newton;
        int diaAtual, mesAtual, anoAtual;

    public:
        Aux_main();
        void Executar();

};

#endif

Aux_main.cpp

#include "Aux_main.h"

Aux_main::Aux_main(){

    Einstein.Inicializa(14,3,1879, "Albert Einstein");
    Newton.Inicializa(4,1,1643, "Isaac Newton");

    std::cout << "Informe o dia/mes/ano." << endl;
    std::cin >> diaAtual >> mesAtual >> anoAtual;

    Executar();

}

void Aux_main::Executar(){

    Einstein.CalcIdade(diaAtual,mesAtual,anoAtual);
    Newton.CalcIdade(diaAtual,mesAtual,anoAtual);

}

Pessoa.cpp

#include "Pessoa.h"
using namespace std;
#include <iostream>

using std::cout;
using std::endl;

Pessoa::Pessoa(int diaN, int mesN, int anoN, const char* nomeN){
    Inicializa(diaN, mesN, anoN);
}

Pessoa::Pessoa(){
    Inicializa(0,0,0);  
}

void Pessoa::Inicializa(int diaN, int mesN, int anoN, const char* nomeN){
    dia = diaN;
    mes = mesN;
    ano = anoN;
    idade = -1; 
    strcpy(nome, nomeN);
}

void Pessoa::CalcIdade(int ano_atual, int mes_atual, int dia_atual){  
    idade = ano_atual - ano;
    if(mes_atual<mes){
        idade--;
    }
    else if(mes_atual==mes){
        
        if(dia_atual<dia){
            idade--;
        }
    }

    cout << "A idades de " << nome << " no ano de 2023 seria de " << idade << " anos.\n" << endl;

}

int Pessoa::getIdade(){
    return idade;
}

Pessoa.h

#include <stdio.h>
#include <string.h>
#include <iostream>

using std::cout;
using std::endl;

#ifndef PESSOA_H
#define PESSOA_H

class Pessoa{

    private:
   
        int dia, mes, ano, idade;
        char nome[30];

    public:

        Pessoa(int diaN, int mesN, int anoN, const char* nomeN = "");
        Pessoa();
        void Inicializa(int diaN, int mesN, int anoN, const char* nomeN = "");
        void CalcIdade(int ano_atual, int mes_atual, int dia_atual);
        int getIdade();

};

#endif

解决方法

链接错误的核心原因是编译时仅处理了main.cpp,未将Aux_main.cpp和Pessoa.cpp的实现文件纳入编译链接流程,导致编译器找不到类的具体实现代码。以下是两种在VS Code中正确编译链接的方式:

方式1:直接使用g++命令行

打开VS Code终端(快捷键`Ctrl+``),进入项目所在目录,执行以下命令:

g++ main.cpp Aux_main.cpp Pessoa.cpp -o main.exe

执行完成后,生成的main.exe即为可执行文件,直接运行即可。

方式2:配置VS Code的tasks.json

  1. 按下Ctrl+Shift+B,选择"创建tasks.json文件",再选择"g++ - 生成活动文件"。
  2. 将生成的tasks.json内容替换为以下配置:
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:/msys64/ucrt64/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": "编译器: C:/msys64/ucrt64/bin/g++.exe"
        }
    ]
}

注意:若你的g++安装路径与上述不同,需修改command和detail中的路径为实际路径。
3. 保存配置后,再次按下Ctrl+Shift+B,即可自动编译所有.cpp文件并生成可执行文件。

额外代码修正

Aux_main.cpp中使用了std::cout和std::cin但未包含<iostream>头文件,需在文件顶部添加:

#include <iostream>

否则编译时会出现未定义标识符的错误。

内容的提问来源于stack exchange,提问作者arnf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:42:54