二维向量表示类没有名为 push_back 的成员

Posted

技术标签:

【中文标题】二维向量表示类没有名为 push_back 的成员【英文标题】:2d vector says class does not have member named 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 【参考方案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; 类型的数据成员。如果你想要这样一个成员函数,你必须定义它。

【讨论】:

以上是关于二维向量表示类没有名为 push_back 的成员的主要内容,如果未能解决你的问题,请参考以下文章

在展开期间将向量成员推入向量:vector.push_back(vector[0])

.push_back 如何在 C++ 中工作?

C++ - 没有匹配的成员函数调用“push_back”

类 std::vector<...> 没有名为 [重复] 的成员

在构造函数中初始化成员变量二维向量

push_back 时跳过向量位置