我正在为我的学校作业写一个简单的航班预定系统。我应该动态创建一个数组而不确定大小。由于我必须跟踪数组的大小,所以我在我的类中声明了一个名为count的整型变量。我也有一个飞行班,有一个复制构造函数和一对getter。然后,我写了下面的方法动态分配阵列
void ReservationSystem::addFlight(const int flightNo, const int rowNo, const int seatNo) {
if (count == 0) {
Flight *tmp = new Flight(flightNo, rowNo, seatNo);
listOfFlights = new Flight*[count+1];
listOfFlights[count] = tmp;
count++;
} else {
bool check = true;
for (int i = 0; i < count && check; i++) {
if (listOfFlights[i]->getFlightNo() == flightNo) {
std::cout << "There is already a flight with that flight code" << std::endl;
check = false;
}
}
if (check) {
Flight *tmp = new Flight(flightNo, rowNo, seatNo);
Flight** tmparr = new Flight*[count + 1];
for (int i = 0; i < count; i++) {
Flight *f = new Flight(*listOfFlights[i]);
tmparr[i] = f;
}
tmparr[count + 1] = tmp;
for (int i = 0; i < count; i++) {
delete listOfFlights[i];
}
delete listOfFlights;
listOfFlights = tmparr;
count++;
}
}
}
我也有一个showFlight(const int flightCode)
方法表示具体的航班:
void ReservationSystem::showFlight(const int flightNo) {
bool check = true;
for (int i = 0; i < count; i++) {
if (listOfFlights[i]->getFlightNo() == flightNo) {
std::cout << "Flight " << listOfFlights[i]->getFlightNo() << " has " << listOfFlights[i]->getAvailableSeats() << " available seats" << std::endl;
listOfFlights[i]->printSeats();
check = false;
}
}
}
这是我的默认构造函数和拷贝构造函数Flight
类:
Flight::Flight(const int flightNo, const int rowNo, const int seatNo) {
flight = flightNo;
row = rowNo;
seat = seatNo;
available = rowNo * seatNo;
flightPlan = new char*[seatNo];
// initialize the flight plan to all seats available
for(int i = 0; i < seatNo; ++i) flightPlan[i] = new char[rowNo];
for(int i = 0; i < seatNo; ++i) {
for(int j = 0; j < rowNo; ++j) flightPlan[i][j] = 'o';
}
}
Flight::Flight(const Flight &obj) {
const int flight = obj.flight;
const int row = obj.row;
const int available = obj.available;
char** flightPlan = obj.flightPlan;
}
但在行if (listOfFlights[i]->getFlightNo() == flightNo)
xcode给我EXC_BAD_ACCESS错误。我认为背后的原因是我的addFlight()
方法出现故障,因为没有对象,数组指向null,对吧?由于它不能达到getFlightNo()
方法,它会引发此错误。
请注意,这是我第一次使用C++,所以我是一个完整的n00b,而且我可能会非常错误。任何帮助将不胜感激。
该复制构造函数看起来确实是错误的,只是设置了一堆未使用的局部变量。 –
为什么不使用'std ::'容器类?像'std :: vector <>'? – nvoigt
如果你的学校教你数组和指针数组,指向数组和'new []',以及'std :: vector'之前的所有这些,他们会把你扯掉。 –