簡體   English   中英

使用包含靜態成員變量的類的向量

[英]Using vector of a class that contains static member variable

我有一個飛機班,這個飛機有一個名為“ m_seat”的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 :: vector <_Ty,_Aloc> :: push_back函數的重載不接受0個參數,

如果這確實是問題,我不知道應該在push_back()中放入什么? 所以我嘗試了{}

m_seat.push_back({});

而且有效!

現在,我有另一個問題,這是我的主要問題 (因此,規則:一次只問一個問題!),所有座位數似乎都增加到了相同的數字! 我還使用了向量的“調整大小”成員函數,而不是該循環:

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

這樣,您可以通過向飛機構造函數添加另一個參數來告訴它從哪個數字開始計數來獲得舊的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM