【发布时间】:2016-01-09 00:56:53
【问题描述】:
我在将对象推送到向量时遇到问题。
我涉及三个类:Pack.h、Player.h、Hand.h
Pack 发牌,Player 接受 Pack 的牌,然后 Hand 接受 Player 的牌。
功能:
发牌的包
bool Pack::Deal(std::vector<Player>players, unsigned int numberOfCards)
{
//This assumes that if we cannot deal the requested number of cards we do not deal any cards at all.
//If we wanted to deal as many cards as possibly we would check for errors while iterating over players.
if (m_pack_of_cards.size() < players.size() * numberOfCards) //check that we have enough cards to complete deal
{
std::cout << "Not enough cards to complete deal." << std::endl;
return false;
}
else
{
for (unsigned int i = 0; i < numberOfCards; i++)
{
for (auto player : players)
{
player.Accept_Card_From_Pack(m_pack_of_cards.back());
m_pack_of_cards.pop_back();
}
}
return true;
}
}
玩家从包中接受卡片
bool Player::Accept_Card_From_Pack(Card card)
{
m_player_hand.Accept_Card_From_Player(card);
return true;
}
从玩家手中接过卡片的手
bool Hand::Accept_Card_From_Player(Card card)
{
m_hand_of_cards.push_back(card);
return true;
}
我的主要功能
int main()
{
Pack pack = Pack();
std::vector<Player> players(4);
for (int i = 0; i < 4; i++)
{
players[i] = Player("Player: " + std::to_string(i));
}
pack.Deal(players, 8);
system("pause");
return 0;
}
它的作用是创建一个新包,创建一些玩家,向每个玩家发一些牌。
问题出在玩家拿牌,Pack 调用玩家接受卡片函数,玩家接受卡片函数调用 Hand 的接受卡片函数,然后 Hand 应该将卡片推回它的卡片向量。
它确实将其推回,如果我在 push_back 之前和之后 std::cout 向量的大小从 0 变为 1,但它并没有保留该项目,所以下次我推回它时将再次给我 0 和 1 作为 push_back 前后向量的大小。
哦,这是大学作业(我必须把它放在这里吗?我不记得了)。
【问题讨论】: