g++错误:netbeans在linux中编译时未定义引用

g++ error: undefined reference while netbeans compiles in linux

本文关键字:编译 未定义 引用 linux 错误 netbeans g++      更新时间:2023-10-16

Im在linux mint中使用NetBeans IDE进行C++编程。NetBeans编译代码很好,但当我尝试像在g++ main.cpp中那样使用g++编译main.cpp时,我会得到undefined reference错误:

我知道有很多像这样的问题,他们可以通过使用正确的-l库来解决这个问题,但我找不到任何与NetBeans/g++相关的问题,我也不知道如何克服这个问题。感谢您的帮助。

错误:

tmp/ccXSo5xI.o: In function `main':
main.cpp:(.text+0x82): undefined reference to `Hospital::Hospital(int, int, int)'
main.cpp:(.text+0xf3): undefined reference to `Resident::Resident(int, int)'
.
.
.

main.cpp

#include <iostream>
#include <cstdio>
#include "Resident.h"
#include "Hospital.h"
#include <stack>
using namespace std;
void readFromFiles(int [][10], int [][10]);
void readFromFiles(Hospital*[10], Resident*[10]);
void print10(int [][10], int [][10]);
void print10(Hospital*[10], Resident*[10]);
int main(void) {
    int hospital[10][10] = {0};
    int resident[10][10] = {0};
    Hospital **hospitals = new Hospital*[10];
    for(int i = 0 ; i < 10 ; i++)
        hospitals[i] = new Hospital(3, i, 10);  //3: quota, i: hospital number, 10:prefereneceLength
    Resident **residents = new Resident*[10];
    for(int i = 0 ; i < 10 ; i++)
        residents[i] = new Resident(i,10);  //i: hospital number, 10:prefereneceLength
.
.
.

医院.h

#ifndef HOSPITAL_H
#define HOSPITAL_H
#include "Resident.h"
using namespace std;
class Hospital {
public:
    //constructors & destructors
    Hospital();
    Hospital(const int, const int, const int);
    Hospital(const Hospital& orig);
    virtual ~Hospital();
    //getters & setters
    int getNumber();
    int getQuota();
    int** getPreferenceList();
    //member functions
    void addPreference(const int, const int);
private:
    int number;
    int* preferenceList[2]; //1st row: preference order ; 2nd row: admission status
    int quota;
    Resident *admittedResidents;
};
#endif  /* HOSPITAL_H */

Resident.h

#ifndef RESIDENT_H
#define RESIDENT_H
class Resident {
public:
    //constructors & destructors
    Resident();
    Resident(const int, const int);
    Resident(const Resident& orig);
    virtual ~Resident();
    //getters, setters
    int getNumber();
    int* getPreferenceList();
    bool getAdmissionStatus();
    //member functions
    void addPreference(const int, const int);
private:
    int number;     //resident number
    int proposalCount;
    int* preferenceList;    //not inverse, unlike Hospitals pref list
    bool admissionStatus;
};
#endif  /* RESIDENT_H */

我知道这是很多代码,尽管我缩短了它们,但我认为它们是必要的部分。谢谢

您需要包括所有源文件:

g++ main.cpp hospital.cpp resident.cpp

g++ main.cpp将尝试编译并将main.cpp链接到可执行文件(a.out(中。在链接阶段,ldmain.cpp中被调用时没有找到HospitalResident构造函数的符号,因为它们尚未编译。

如果您只想编译main.cpp,请使用:

g++ -c main.cpp

您可以稍后使用以下链接对象文件:

g++ main.o hospital.o resident.o 

如果您想编译并链接整个批次:

g++ main.cpp hospital.cpp resident.cpp