初始化类的聚合成员

initializing aggregated members of a class

本文关键字:成员 初始化      更新时间:2023-10-16

我希望能够在我的方法中初始化 Seat。我想我需要重载我的"="运算符,但我不确定。

void Ticket::setSize(Ticket ticket[], int a) {
   ticket[ticketCount].groupSize = a;
   ticket[ticketCount].seatInfo = new Seat[ticket[ticketCount].groupSize];
}

这是我下面的票类。我正在调用 setSize。并传递变量以初始化与 Ticket.groupSize 相关的 seatInfo。以下是我的机票和座位等级

class Ticket {
    private:
        Seat * seatInfo;
    double totalPrice;
    string flightInfo;
    int ticketNumber;
    int groupSize;
    void countPrice();
    public:
        Ticket(Seat[], int, string);
    ~Ticket();
    void print();
    double getPrice();
    string toString();
    static int getTicketCount();
    static void setTicket(Ticket[], int);
    static void setSize(Ticket[], int);
    const Seat & setSeat(Seat * );
    Seat & operator = (Seat & );
}
#endif

座位.h

class Seat {
   private:
      int seatNumber;
   double price;
   const double BUSINESS_PRICE = 200.00;
   const double ECONOMIC_PRICE = 100.00;
   Person * reserver;
   bool isBusinessClass(int);
   public:
       // constructor
      Seat();
   Seat(int, int, Person * );
   Seat(int, double, Person * );
}

我得到的错误是没有可以做到这一点的构造函数。 并且没有"="运算符函数。如果您需要更多信息,请告诉我

seatInfo被定义为Seat的指针。

座位

*座位信息;

ticket

[ticketCount].seatInfo 可以是指向 Seat 实例的指针,但不能是 Seat 实例的数组。

让 seatInfo 指向 Seat 的 1 个实例以查看错误是否仍然存在怎么样?

ticket

[ticketCount].seatInfo = new Seat();

Constuctor 被称为 new Class() ,在您的情况下new Seat() 。因此,将 new Seat 后面的 [] 替换为 ()。此外,您正在尝试调用构造函数 Seat(int) ,它没有声明,因此要么使用您声明的 3 个之一,要么声明它。