【问题标题】:2d vector says class does not have member named push_back二维向量表示类没有名为 push_back 的成员
【发布时间】:2016-12-15 23:28:56
【问题描述】:
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;
    }
      }
    }
  }
}

我有一个包含类型项目数据的宇宙飞船类型的 2d 向量。 我正在尝试将项目对象添加到第一艘飞船中,但它给了我一个错误,说类飞船项目没有名为 push_back 的成员

就是这条线,我看不出有什么问题。

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

感谢您的帮助。

编辑:如果您要对我投反对票,请至少给我一个理由。我只是在问一个问题。

【问题讨论】:

  • m_itemShips[i] 看起来是 Spaceship &lt;Item&gt;,而不是 std::vectorSpaceship 可能有也可能没有 push_back 方法。如果没有minimal reproducible example 或猜测,就不能说更多。题外话,看看使用Member Initializer List
  • Spaceship 是一个模板类。它没有 push_back 方法,但 ManageSupply 类创建了一个 spaceship 类型的向量,因此它应该可以访问 push_back。我不确定
  • "所以它应该可以访问 push_back" 什么 push_back?你说没有,那是你的问题。
  • c++ 中的向量可以访问向量库中内置的 push_back 方法吗?
  • m_itemShips 是一个 std::vector 并且有一个 push_back 方法。 m_itemShips[i] 是从vector m_itemShips 获取i 的项目的请求。 i 中的项目是 Spaceship &lt;Item&gt;。您在Spaceship &lt;Item&gt; 上拨打push_back i,而不是m_itemShips

标签: c++ vector push-back


【解决方案1】:

m_itemShips 是(大概)std::vector&lt; Spaceship &lt;Item&gt; &gt;m_itemsstd::vector&lt; Item &gt;。 (并且您没有提供有关 SpaceShipItem 是什么的信息)。

这意味着m_itemShips[i].push_back(m_items[itemCount]) 要求SpaceShip&lt;Item&gt; 有一个名为push_back() 的成员函数,它可以接受Item

如果SpaceShip&lt;Item&gt; 没有这样的push_back() 成员函数,则说明您的错误消息。

重要的是,SpaceShip&lt;Item&gt; 不会神奇地获取名为 push_back() 的方法,即使它具有 std::vector&lt;Item&gt; 类型的数据成员。如果你想要这样一个成员函数,你必须定义它。

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多