gpt4 book ai didi

c++ - 随机播放功能不能使用指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:01 25 4
gpt4 key购买 nike

我最近开始使用 C++ 并创建了一个名为 Deck 的类,它几乎可以创建一副纸牌。它的功能之一是洗牌。我在 main() 中创建了一个类型为 Deck 的对象,并且能够调用 shuffle() 成员函数...它起作用了!但是,当我使用指针访问 shuffle() 函数时,Xcode 突出显示:

Card u1 = *(cards[index]); 

和输出:

Thread 1:EXC_BAD_ACCESS (code = EXE_1386_GPFLT) 

有人能帮我吗?

void Deck::shuffle()
{
srand(static_cast<unsigned int>(time(0)));

for(size_t x = 0;x<cards.capacity();x++)
{
int index = rand()%51;
int index2 = rand()%51;

Card u1= *(cards[index]);
*cards[index] = *cards[index2];
*cards[index2] = u1;
}
}

int main()
{
//Deck p;
//p.shuffle(); //works!
//p.Display();//works!
Deck *p;
p->shuffle(); //does not work!
}

最佳答案

您的代码中有几个错误。

指向任何地方的指针

Deck *p;
p->shuffle(); //does not work!

您刚刚创建了一个指向牌组的指针。指针指向的实际甲板在哪里?

你应该这样做

Deck* p = new Deck;
p->Shuffle();

Deck theDeck;
Deck* p = &theDeck;
p->Shuffle();

迭代直到大小,而不是容量

for(size_t x = 0;x<cards.capacity();x++)

您不能访问 vector 容量内的所有元素。你应该使用 x < cards.size()

卡片不是指针,是吗

你的cards容器保存指向卡片的指针?如果它包含实际的卡片,而不是指向它们的指针,那么您的交换例程不应使用取消引用(*cards[index] --> cards[index])

52 张牌,不是 51 张

顺便说一句,如果cards有 52 个元素,那么你应该 rand()%52 ,而不是 51。

关于c++ - 随机播放功能不能使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com