2

おそらくタイトルからわかるように、ファイル「booking.h」のコンストラクターで変数「passNum」の初期化中にエラーが発生しました

このファイルにはフライト予約プログラムの予約クラスが含まれており、最初はフライトに乗客がいないため、passNum を 0 に初期化したいと考えています。ただし、ユーザーがフライトに空きがあるかどうかを確認するために用意されていた「フライトがいっぱいです」というメッセージが表示され続けます。SO、エラーを確認するために、実際に passNum に格納された番号を確認するために cout を追加しました。出力は「28080747」でしたが、コンパイルして実行するたびに数値が変わります。

予約ファイル...

//Booking class - Scotia Airlines
//Zac Mazs
//This class will reserve a seat for passenger


#include <iostream>
#include <string>

#include "flight.h"

using namespace std;

class Booking{

public:
    // default constructor
    Booking()
    {
    int passNum = 0; // initialise passenger number to 0
    totalSeats = 24; // total seats on plane
    fName = "empty";
    sName = "empty";
    busName = "empty";
    }
    // accessor methods

    void setPassNum(int p){passNum = p;}

    string getFname(){return fName;}
    string getSname(){return sName;}
    string getBusName(){return busName;}


    void addBooking()
    {

    if (passNum >= totalSeats) // if the number of passengers exceeds 24 then display flight-full message
        {
            cout << passNum;
            cout <<"Flight is full";
        }
        else
            {
                cout << "\tBooking Menu \n\n";
                cout << "Please select ticket type: \n";
                cout << "1- Business \n";
                cout << "2- Western Isles \n";
                cout << "3- Ordinary \n";
                cin >> livesAt;

                    // This will be used to calc total cost for each passenger dependant on ticket type
                    if(livesAt == 1)
                        {
                        discount = 0.75;
                        cout << "Please enter your business name\n";
                        cin >> busName;
                        }

                        else if (livesAt == 2)
                            {
                            discount = 0.90;
                            }

                        else if(livesAt == 3)
                            {
                            discount = 1.0;
                            }
                        else
                        {
                            cout << "Error, please choose 1,2 or 3";
                        }

                // Calculation - Standard ticket price is 60 Beans
                tickPrice = 60.0;
                tCost = (tickPrice * discount);



            bool booked = false;
                for(int ROW = 0; ROW < 4 && !booked; ROW++)
                    {
                        for(int COL = 0; COL < 6 && !booked; COL++)
                        {
                            if(f.isAvailable(ROW,COL) == true)
                            {
                            cout << "Please enter your first name \n";
                            cin >> fName;
                            cout << "Please enter your second name \n";
                            cin >> sName;
                            //create new string fullName from fName and sName
                            fullName == fName + " " + sName;

                            f.setName(ROW,COL, fullName);
                            f.setAvailable(ROW,COL,0);

                            f.seatArray[ROW][COL].available++;

                            booked = true;
                            // increment pass num/decrement totalSeats
                            totalSeats--;
                            passNum++;

                            // Message on screen for customer displaying cost of flight
                            cout << "*******************************\n";
                            cout << "\tBooking for "; cout << fName + " " + sName; cout << " confirmed.\n";
                            cout << "\tTotal cost = " << tCost << " GBP.\n";

                            }//end of if
                        }//end of for2
                    }//end of for1
            }//end else
    }// End of addBooking function

private:
//Declare all variables

string fName, sName, busName, fullName;
int livesAt, totalSeats;
int passNum;

float discount, tickPrice, tCost;

Flight f;
Seat s;
Passenger p;
};// End of addBooking class

何かご意見は?本当に助かりました!

前もって感謝します。

4

2 に答える 2

6

コンストラクターでは、passNum がローカルで宣言されます (これにより、プライベート クラス レベルの定義が隠されます)。

への変更:

Booking()
{
    /*int*/ passNum = 0; //initialise passenger number to 0
    totalSeats = 24; // total seats on plane
    fName = "empty";
    sName = "empty";
    busName = "empty";
}
于 2013-01-23T19:11:30.300 に答える
4

問題int

    int passNum = 0; // initialise passenger number to 0

メンバー変数に割り当てているのではなく、同じ名前の新しいローカル変数を作成しています。

修正するには、を削除しintます。

于 2013-01-23T19:11:02.380 に答える