gpt4 book ai didi

c++ - 使用包含静态成员变量的类的 vector

转载 作者:行者123 更新时间:2023-11-28 05:07:18 29 4
gpt4 key购买 nike

我有一个Airplane 类,这架飞机有一个名为“m_seat”的Seat 类 vector 。在我的飞机的构造函数中,我使用座位数作为所需参数,将 m_seat vector 大小调整为用户请求的大小。这是我的代码:

class Seat;

class Airplane {
vector<Seat> m_seat;
public:
Airplane(int);
};

class Seat{
static int m_seatNumber;
public:
Seat() { m_seatNumber += 10; }
};

int Seat::m_seatNumber = 100;

Airplane::Airplane(int numberOfSeats) {
for (int i = 0; i<numberOfSeats; ++i) {
m_seat.push_back();
}
}

int main()
{
Airplane(80);
return 0;
}

但它给出了这个错误。

std::vector<_Ty,_Aloc>::push_back no overload of function takes 0 arguments,

如果这真的是问题所在,我不知道应该在 push_back() 中放入什么?所以我尝试了{}

m_seat.push_back({});

成功了!

现在,我有另一个问题,这是我的主要问题(所以规则:一次只问一个问题!)所有座位号似乎都增加到相同的号码!我还使用了 vector 的“调整大小”成员函数,而不是那个循环:

m_seat.resize(numberOfSeats);

但是问题(同样增加了m_seatNumber的数量)仍然没有解决。非英语母语者,抱歉。

最佳答案

免责声明:这是“最佳猜测”答案。

如果您希望每个座位都有一个不同的、自动递增的数字,您需要两个值;一个非静态的,描述每个座位,一个静态的,描述最后使用的号码:

class Seat{
static int lastSeatNumber;
int seatNumber;

public:
Seat() { seatNumber = lastSeatNumber; lastSeatNumber += 10; }
};
int Seat::lastSeatNumber = 100;

这样一来,每个座位都将获得不同的编号。但是,这种设计很糟糕,因为它不允许例如两架飞机共享座位号!它还不允许您“腾出”不再使用的座位数量,而且数量只会不断增加。同时复制一个 Seat,虽然可能,但根本不会操纵该号码。允许 Airplane 类分配座位号会好得多:

class Seat{
int seatNumber;

public:
Seat(int seatNumber) : seatNumber(seatNumber) { }
};

Airplane::Airplane(int numberOfSeats) {
int seatNumber = 100;
const int numberIncrement = 10;

for (int i = 0; i < numberOfSeats; ++i) {
m_seat.push_back(Seat(seatNumber));
seatNumber += numberIncrement;
}
}

通过这种方式,您可以通过向飞机构造函数添加另一个参数来告诉它从哪个数字开始计数,从而获得旧行为。

关于c++ - 使用包含静态成员变量的类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390560/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com