在缺席 10 年后,我刚刚回到 C++,因此决定尝试编写一个 ASCII BlackJack 游戏。我决定使用向量来同时持有牌组和玩家手,但我发现当我调用初始发牌函数时,应该将 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() 函数中创建的数据一旦完成就会被删除?