2017-06-06 25 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> ::一back機能の過負荷は0引数を取らない

と、これは本当に問題だった場合、私は私が入れているべきか分からなかった

私のpush_back()?だから私は{}

m_seat.push_back({}); 

と働いた!

今私は私の主な問題(SOルール:一度に1つの質問だけを尋ねてください!)です。すべての座席番号が同じ数に増えているようです!私はまた、代わりにそのループを、ベクターの「リサイズ」メンバ関数を使用する:

m_seat.resize(numberOfSeats); 

しかし、問題(m_seatNumber数の同じ増加)が未解決のままです。 非ネイティブ英語講師、申し訳ありません。

+0

'Seat'オブジェクトをプレーンで単純にプッシュしますか? 'Seat'クラスが静的メンバー変数を持っているのは本当に問題ではありませんか?あなたの問題は、コード問題よりも設計問題(あるいは設計の欠如*)が多いようです。 –

+0

"すべての座席番号が同じ数に増えているようです!" - 申し訳ありませんが、言い換えることはできますか?あなたは何を期待していますか、あなたは何を見ていますか?あなたはそれぞれの座席が異なった番号を持つことを望みましたか? –

+1

まず、 'm_seatNumber'は静的なのですか?各座席に固有の番号を付けるべきではありませんか? – NathanOliver

答えて

1

免責事項:これは「最良の推測」の回答です。

座席ごとに自動的に増加する番号が異なるようにするには、2つの値が必要です。各シートを記述する1つの非静的、及び静的な、最後に使用数説明:

class Seat{ 
    static int lastSeatNumber; 
    int seatNumber; 

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

各座席が異なる番号を受信する方法を。しかしながら、この設計は悪い。 2台の航空機間の座席数の共有!それはあなたがもはや使用していない座席の数を "自由にする"ことを許さず、その数は増え続けるだけです。また、可能であれば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; 
    } 
} 

この方法であなたはからカウントを開始するためにどの番号にそれを伝える飛行機のコンストラクタに別のパラメータを追加することにより、以前の動作を得ることができます。

関連する問題