2017-06-06 75 views
0

我有一個飛機類和此飛機有一個向量類名爲「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

回答

1

聲明:這是「最佳猜測」答案。

如果您希望每個座位都有不同的自動增加的數字,您需要兩個值;一個非靜態,描述每個座位,一個靜態描述最後使用的號碼:

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

這種方式,您可以通過添加另一個參數的構造函數飛機,告訴它開始計數,其數量得到舊的行爲。