我正在爲我的學校作業寫一個簡單的航班預定系統。我應該動態創建一個數組而不確定大小。由於我必須跟蹤數組的大小,所以我在我的類中聲明瞭一個名爲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'之前的所有這些,他們會把你扯掉。 –