使用包含静态成员变量的类的向量
问题描述:
我有一个飞机类和此飞机有一个向量座类名为“m_seat”。 在我的飞机的构造函数中,我使用了座位的数量作为所需的参数,将m_seat矢量大小调整为用户所需的大小。这是我的代码:使用包含静态成员变量的类的向量
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 ::矢量< _Ty,_Aloc> ::没有的push_back函数重载接受0参数,
,如果这确实是问题,我不知道我应该已经把我的push_back()?所以我尝试{}
m_seat.push_back({});
它工作!
现在,我有另一个问题,它是我的主要问题(SO规则:一次只问一个问题!)所有座位数似乎增加到相同数!我还使用了矢量的“调整大小”成员函数,而不是该循环:
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;
}
}
这种方式,您可以通过添加另一个参数的构造函数飞机,告诉它开始计数,其数量得到旧的行为。
你推一个'Seat'对象很简单吗? “Seat”类有一个静态成员变量应该不是真的重要,应该吗?看起来你的问题更多的是设计问题(或者说,缺乏设计)而不是代码问题。 –
“所有座位数字似乎都增加到相同的数字!” - 对不起,您能重新解释吗?你在期待什么,你在看什么?你想让每个座位都有一个明显的,增加的数字吗? –
首先,为什么'm_seatNumber'是静态的?不应该每个座位都有自己的号码吗? – NathanOliver