构造函数中变量的启动不起作用,而是给我一个随机数

Initilisation of variable in constructor not working but instead giving me a random number

本文关键字:随机数 一个 变量 启动 不起作用 构造函数      更新时间:2023-10-16

正如您可能从标题中收集到的那样,我在文件"booking.h"的构造函数中初始化变量"passNum"时出错

该文件包含航班预订计划的预订类,我想将passNum初始化为0,因为最初航班上没有乘客。但是,我不断收到消息"航班已满",该消息可供用户查看航班上是否还剩下任何空间。 因此,要查看错误,我添加了一个 cout 以查看 passNum 中实际存储的数字。输出是"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 nn";
                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 namen";
                        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

有什么想法吗?我真的很感激你的帮助!

提前谢谢。

在构造函数中,passNum 在本地声明(它隐藏了私有类级定义)。

更改为:

Booking()
{
    /*int*/ passNum = 0; //initialise passenger number to 0
    totalSeats = 24; // total seats on plane
    fName = "empty";
    sName = "empty";
    busName = "empty";
}

问题是int

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

您不是在分配给成员变量,而是在创建具有相同名称的新局部变量。

要解决此问题,请删除int