c ++ struct中的void无法改变一个结构值

时间:2015-12-24 13:31:26

标签: c++ function struct pass-by-reference

我有这个结构

typedef struct _flight {

    FlightId flightId;

    int totalPlaces;
    int booked;

    float currentPrice;
    float initialPrice;

    void Print(int index);
    void RecalculatePrice();
    bool BookSeats(int amount);
} Flight;

这引起了麻烦,BookSeats:

bool Flight::BookSeats(int cantidad) {
   if (booked + cantidad <= totalPlaces) {
      booked = booked + cantidad;
      RecalculatePrice();
      return true;
   }
   return false;
}

当我调用BookSeats时,值的变化不会存储在方法的末尾(比如当你将一个变量按值传递给参数时),我试着使用

this->booked = booked + cantidad; // but doesn't work too;

我做错了什么?我不知道是否是引用问题但是...变量和void都在结构内部。我不明白。

1 个答案:

答案 0 :(得分:0)

在使用变量之前,您需要通过设置值来初始化它。 如果您的编译器接受c ++ 11,您可以直接在类/结构中进行,如下所示:

struct Flight {
    int booked = 0; // in-class initialization (c++11)
};

对于较旧的c ++编译器,Flight的构造函数应该初始化其成员:

struct Flight {
    Flight() : booked(0) {}
    int booked; 
};