我的课程中有一个任务是编写一个程序,创建52个卡片对象,每个卡片都有一个值和一个套装.在我们创建一个对象数组后,我们必须随机切换两张卡的位置.问题是,当我去交换我的卡时,它们都变成了相同的.这是导致问题的代码:
void SwapCards(Card* cardOne, Card* cardTwo) {
//swap cards here
Card *temp = cardOne;
*cardOne = *cardTwo;
*cardTwo = *temp;
//once it gets here all three variables end up with the same object?
}
Run Code Online (Sandbox Code Playgroud)
现在这里是调用此函数的for循环:
for (int i = 0; i < 104; i++) {
//get two random values and send them to SwapCards to switch both objects
int c_one = RandomRange(0, 51);
int c_two = RandomRange(0, 51);
SwapCards(deck[c_one], deck[c_two]);
}
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将不胜感激.我花了很多时间试图解决这个问题,但这让我很困惑.
"问题是,当我换掉我的牌时,他们两个都变成了相同的牌."
你失去了cardOne这里的当前价值:
*cardOne = *cardTwo;
Run Code Online (Sandbox Code Playgroud)
由于temp仍然指向相同的地址cardOne,因此cardOne原始值未保存.
更改您的代码如下,以保存cardOne值:
Card temp = *cardOne;
*cardOne = *cardTwo;
*cardTwo = temp;
Run Code Online (Sandbox Code Playgroud)
更好(也可能更清晰)的解决方案是使用引用而不是指针:
void SwapCards(Card& cardOne, Card& cardTwo) {
//swap cards here
Card temp = cardOne;
cardOne = cardTwo;
cardTwo = temp;
}
Run Code Online (Sandbox Code Playgroud)
并且作为旁注:这是std::swap()已经做过的,不需要在这里推出自己的实现.