2016-12-15 2 views
-3
ManageShips::ManageShips(vector< Spaceship <Item> > itemShip, 
        vector< Spaceship <Person> > personShip, 
        vector<Item> itemCargo, 
        vector<Person> personCargo){ 

    m_itemShips = itemShip; 
    m_personShips = personShip; 
    m_items = itemCargo; 
    m_person = personCargo; 

} 

void ManageShips::LoadItemShip(){ 

    int numberItemShips = m_itemShips.size(); 

    int numberOfItems = m_items.size(); 

    int itemCount = 0; 

    for (int i = 0 ; i < numberItemShips ; i++){ 

    int shipFull = 0; 

    double shipWeight = 0; 


    while (shipFull == 0){ 

     while (itemCount < numberOfItems){ 

    if ((m_items[itemCount].GetWeight() + shipWeight) > m_itemShips[i].GetCapacity()){ 
     shipFull = 1; 
    } 
    else { 
     m_itemShips[i].push_back(m_items[itemCount]); 
     shipWeight = m_items[itemCount].GetWeight() + shipWeight; 
     itemCount = itemCount + 1; 
    } 
     } 
    } 
    } 
} 

私は、アイテムタイプのデータを保持するタイプの宇宙船の2次元ベクトルを持っています。 アイテムオブジェクトを最初の宇宙船に追加しようとしていますが、クラス宇宙船アイテムにpush_backというメンバがありませんというエラーが表示されます2dベクトルには、push_backという名前のメンバはありません。

これはこの行です。

m_itemShips[i].push_back(m_items[itemCount]); 

助けていただければ幸いです。

編集:もしあなたが私に理由を教えてください。私はちょうど質問をしています。

+1

'm_itemShips [i]'は、 'std :: vector'ではなく、' Space Ship 'となります。 'Spaceship'には' push_back'メソッドがあるかもしれません。もっと多くのことは[mcve]や推測がなければ言えません。トピックから、[Member Initializer List](http://en.cppreference.com/w/cpp/language/initializer_list)を参照してください。 – user4581301

+0

Spaceshipはテンプレート化されたクラスです。それはpush_backメソッドを持たないが、ManageSupplyクラスは、宇宙船のベクトルを作成するので、push_backにアクセスする必要がある。私は確信していません –

+0

"それはpush_backにアクセスする必要があります"何のpush_back?あなたは1つもない、あなたの問題だと言った。 – mascoj

答えて

0

m_itemShipsは、おそらくstd::vector< Spaceship <Item> >であり、m_itemsは、std::vector<Item>です。 (あなたはSpaceShipまたはItemが何であるかについての情報を与えていません)。

これはm_itemShips[i].push_back(m_items[itemCount])Itemを受け入れることができpush_back()という名前のメンバ関数を持っているSpaceShip<Item>を必要とすることを意味します。

SpaceShip<Item>にこのようなpush_back()メンバ関数がない場合は、エラーメッセージが表示されます。

SpaceShip<Item>は、データ・タイプがstd::vector<Item>であっても、push_back()というメソッドを魔法のように取得することはありません。そのようなメンバ関数が必要な場合は、それを定義する必要があります。

関連する問題