g ++错误:netbeans在linux编译时未定义的引用
在linux mint中使用NetBeans IDE进行C++编程。 NetBeans的编译代码就好了,但是当我尝试使用G ++编译main.cpp
在g++ 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 */
即使缩短了代码,我也知道很多代码,但我认为它们是必要的部分。谢谢。
g++ main.cpp
将尝试编译和链接main.cpp
成一个可执行文件(a.out
)。在链接阶段,ld
找不到Hospital
和Resident
构造函数的符号,而在main.cpp
中调用,因为它们尚未编译。
如果你只是想编译main.cpp
,用途:
g++ -c main.cpp
您可以链接的目标文件后使用:
g++ main.o hospital.o resident.o
如果你想编译和链接整个拍品:
g++ main.cpp hospital.cpp resident.cpp
ofc。对于这个问题抱歉,我在编码4小时后错过了这么简单的事情...... – Varaquilex 2013-03-17 21:53:39
您需要包括所有源文件:
g++ main.cpp hospital.cpp resident.cpp
相关:http://stackoverflow.com/q/15441877/78845 – Johnsyweb 2013-03-17 21:50:17