我对C ++很陌生,而且我遇到了一个问题 我试图写一个二十一点游戏。我有一个大小为52' char'与不同的卡,我想要洗牌。我不知道怎么回事,但不是问题。我做了一个名为' ShuffleDeck'但它不起作用,说它无法返回阵列。我也无法引用该数组。我该怎么办呢?这是我正在讨论的代码部分。
void ShuffleDeck(bool &rgCards[]) {
for (int i = 1; i < 52; ++i) {
//something
}
return rgCards[];
}
所有帮助表示赞赏。
答案 0 :(得分:3)
您使用std::vector
并随机播放其中的值。优选地,通过参考函数传递它并对原始矢量起作用。
从您的代码段开始,您的预期并不完全清楚 - 您通过引用传递bool
数组,但将其作为int
返回,其语法为rgCards[]
在这种背景下绝对没有意义。
编辑:根据弗雷德的评论 - 您可以使用random_shuffle
。
答案 1 :(得分:2)
在您提供的代码段中,您似乎正在尝试将对数组的引用传递给ShuffleDeck()
。数组引用的C ++语法是data-type (&)[N]
,其中N
是数组中元素的数量。将您的功能更改为
void ShuffleDeck( char (&rgCards)[52] ) { ... }
您可以将其设为模板函数,并让编译器推导出数组长度
template<size_t N>
void ShuffleDeck( char (&rgCards)[N] ) { ... }
最后,由于您使用的是C ++,因此您应该切换到使用容器类,例如std::array
或std::vector
而不是C样式的数组。
答案 2 :(得分:2)
您也可以这样做
void shuffle(int* deck, int size)
{
for(int i =0; i < size; i++)
{
deck[i] = i;
}
}
这表明数组确实作为指针传递。
int deck[52];
shuffle(deck,52);
答案 3 :(得分:1)
为了使代码与您编写的内容最相似,我只需进行最少的更正:请注意,&
不是必需的,索引应该从0开始。
void ShuffleDeck(bool rgCards[]) {
for (int i = 0; i < 52; ++i) {
//something
}
}
在调用ShuffleDeck后,您将对rgCards [i]进行任何更改
答案 4 :(得分:0)
最干净的解决方案,IMO:
class Deck {
char cards[52];
public:
void Shuffle();
};
void Deck::Shuffle()
{
// I can change cards here because both cards and Shuffle are members of Deck
}