私は学校の割り当てのための簡単な飛行予約システムを書こうとしています。私は、サイズを決定することなく、動的に配列を作成する必要があります。配列のサイズを調べなければならないので、クラス内でcountという名前の整数変数を宣言しました。コピーコンストラクタと2つのゲッターを持つフライトクラスもあります。それから私は、私はまた、特定のフライトを示しshowFlight(const int flightCode)
方法を持って、次の方法配列の動的割り当て
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++;
}
}
}
を書いた:
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()
メソッドの誤動作だと思いますか?また、getFlightNo()
メソッドに到達できないため、このエラーがスローされます。
これはC++で初めてのことですので、私は完全にn00bであり、ひどく間違えることがあります。どんな助けでも大歓迎です。
コピーコンストラクタは実際には間違っているように見えますが、未使用のローカル変数を設定するだけです。 –
'std ::'コンテナクラスを使わないのはなぜですか? 'std :: vector <>'のように? – nvoigt
あなたの学校があなたに配列とポインタ、そして配列と 'new []'を指すポインタの配列、そして 'std :: vector'の前のすべてのものをあなたに教えている場合、彼らはあなたをリッピングしています。 –