我正在尝试创建一个玩家手中的课程(在前面的纸牌游戏中)。 draw方法将绘制另一张卡,showHand方法应显示手中的当前卡。我试图在构造函数中初始化指针数组,但是如何做到这一点(我相信我的问题源于此)。尝试现在注释掉这个 - > jon = {};给出了这个错误:“错误:分配''到'卡* [12]'”
的不兼容类型***目前在showHand中,如果我只是尝试cout jon [i] - > getRank(),就会弹出一堆废话;但Draw方法效果很好。
class myHand{
public:
myHand(){
this->size=0;
//this->jon={};
}
void Draw(Card anyCard) {
if(size>11) {
cout<<"You can only have a maximum of 12 cards in your hand at a time"<<endl;
return;
}
jon[size]=&anyCard;
cout<<"HERE IS ANYCRD:"<<jon[size]->getRank()<<jon[size]->getSuit()<<endl;
size++;
}
void showHand() {
//DOESNT WORK HERE
}
void Place(Card* anyCard) {
}
private:
int size;
Card* jon[12];
};
答案 0 :(得分:5)
你的问题是悬空指针。
你的更广泛的问题是使用指针。只是不要这样做。存储一组实际 Card
对象。
答案 1 :(得分:1)
数组不可分配,即some_array = {}
在初始化之后是非法的。
此时您的数组已初始化。但它确实包含垃圾,因此在使用之前需要初始化每个元素。
旁注......
jon[size]=&anyCard;
这很糟糕。您正在存储本地变量的地址。一旦函数退出,该指针就会变为无效。
答案 2 :(得分:0)
您正在存储本地变量的地址:
jon[size]=&anyCard;
当它超出范围时(当剩下该功能时)会被销毁。如果要在jon中存储指针,则需要至少制作一份副本。