-2

LinuxmintでC++プログラミングにNetBeansIDEを使用しています。main.cppNetBeansはコードを正常にコンパイルしますが、 g ++を使用してコンパイルしようとすると、エラーが発生しますg++ main.cppundefined 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
.
.
.

Hospital.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 */

短くしてもコードが多いのは知っていますが、必要な部分だと思います。ありがとう。

4

2 に答える 2

1

すべてのソースファイルを含める必要があります。

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

于 2013-03-17T21:50:24.707 に答える
0

g++ main.cppコンパイルして実行可能ファイルにリンク しようとします( )。リンク段階では、まだコンパイルされていないため、呼び出されている間、およびコンストラクターのシンボルが見つかりません。main.cppa.outldHospitalResidentmain.cpp

コンパイルする だけの場合は、次main.cppを使用します。

g++ -c main.cpp

後で以下を使用してオブジェクトファイルをリンクできます。

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

ロット全体をコンパイルしてリンクしたい場合:

g++ main.cpp hospital.cpp resident.cpp 
于 2013-03-17T21:52:39.993 に答える