2013-03-17 124 views
-2

在linux mint中使用NetBeans IDE进行C++编程。 NetBeans的编译代码就好了,但是当我尝试使用G ++编译main.cppg++ main.cpp我得到undefined reference错误:g ++错误:netbeans在linux编译时未定义的引用

我知道有这样一个很多问题,他们的问题可以通过使用正确的-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 */ 

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

+0

相关:http://stackoverflow.com/q/15441877/78845 – Johnsyweb 2013-03-17 21:50:17

回答

0

g++ main.cpp将尝试编译和链接main.cpp成一个可执行文件(a.out)。在链接阶段,ld找不到HospitalResident构造函数的符号,而在main.cpp中调用,因为它们尚未编译。

如果你只是想编译main.cpp,用途:

g++ -c main.cpp 

您可以链接的目标文件后使用:

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

如果你想编译和链接整个拍品:

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

ofc。对于这个问题抱歉,我在编码4小时后错过了这么简单的事情...... – Varaquilex 2013-03-17 21:53:39

1

您需要包括所有源文件:

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

相关问题