二维向量表示类没有名为 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 <Item>
,而不是 std::vector
。 Spaceship
可能有也可能没有 push_back
方法。如果没有minimal reproducible example 或猜测,就不能说更多。题外话,看看使用Member Initializer List。
Spaceship 是一个模板类。它没有 push_back 方法,但 ManageSupply 类创建了一个 spaceshipm_itemShips
是一个 std::vector
并且有一个 push_back
方法。 m_itemShips[i]
是从vector
m_itemShips
获取i
的项目的请求。 i
中的项目是 Spaceship <Item>
。您在Spaceship <Item>
上拨打push_back
i
,而不是m_itemShips
。
【参考方案1】:
m_itemShips
是(大概)std::vector< Spaceship <Item> >
和 m_items
是 std::vector< Item >
。 (并且您没有提供有关 SpaceShip
或 Item
是什么的信息)。
这意味着m_itemShips[i].push_back(m_items[itemCount])
要求SpaceShip<Item>
有一个名为push_back()
的成员函数,它可以接受Item
。
如果SpaceShip<Item>
没有这样的push_back()
成员函数,则说明您的错误消息。
重要的是,SpaceShip<Item>
不会神奇地获取名为 push_back()
的方法,即使它具有 std::vector<Item>
类型的数据成员。如果你想要这样一个成员函数,你必须定义它。
【讨论】:
以上是关于二维向量表示类没有名为 push_back 的成员的主要内容,如果未能解决你的问题,请参考以下文章
在展开期间将向量成员推入向量:vector.push_back(vector[0])