我只是在缺席10年后重新回到C ++,因此决定尝试编写一个ASCII BlackJack游戏。我决定使用一个向量来保持牌组和牌手,但我发现当我调用初始交易函数时,它应该为DEALER向量牌和PLAYER向量牌分配2张牌,它写的牌很好但是当它出来了,后来我想要打印手,我得到一个超出范围的例外。
下面的代码片段!
void deck::initialDeal(player dealer, player player1)
{
for(int i = 0; i < 2 ; i++)
{
dealer.addHand(myDeck[i]);
myDeck.erase(myDeck.begin());
player1.addHand(myDeck[i]);
myDeck.erase(myDeck.begin());
}
}
以上只需从主甲板上取几张牌并调用addHand例程将牌添加到玩家手中:
void player::addHand(card dealtCard)
{
hand.push_back(dealtCard);
}
如果我在addHand函数中输入一个例程来输出手向量,它可以正常工作并显示数据被放入。
然而,稍后我想将手打印到屏幕上,因此有另一个名为printHand()的函数
void player::printHand()
{
if (dealer == true)
{
cout << hand[0].getNumber() << hand[0].getSuit() << " ";
cout << hand.size() << endl;
}
else
{
for(std::vector<card>::size_type x = 0 ; x != hand.size() ; x++)
{
cout << hand[x].getNumber() << hand[x].getSuit() << " ";
}
}
}
目前我正在与经销商方面进行交易,所以当我收到错误时,它会进入该函数的经销商分支。
我觉得我应该在这里使用指针,因为addHand()函数中创建的数据一旦完成就会被删除?
答案 0 :(得分:6)
您似乎通过复制传递所有参数,而不是通过引用传递(并且通过引用我并不是指针)。这意味着您只修改副本而不是原件。
如果你修改这样的函数原型:
void initialDeal(player& dealer, player& player1)
参数通过引用传递,并允许您修改作为参数传递的原始对象。