使用包含静态成员变量的类的向量

问题描述:

我有一个飞机类和此飞机有一个向量类名为“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的数量)仍然没有解决。 非母语英语的发言者,对不起。

+0

你推一个'Seat'对象很简单吗? “Seat”类有一个静态成员变量应该不是真的重要,应该吗?看起来你的问题更多的是设计问题(或者说,缺乏设计)而不是代码问题。 –

+0

“所有座位数字似乎都增加到相同的数字!” - 对不起,您能重新解释吗?你在期待什么,你在看什么?你想让每个座位都有一个明显的,增加的数字吗? –

+1

首先,为什么'm_seatNumber'是静态的?不应该每个座位都有自己的号码吗? – NathanOliver

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

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

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; 
    } 
} 

这种方式,您可以通过添加另一个参数的构造函数飞机,告诉它开始计数,其数量得到旧的行为。