-1

我正在尝试创建一个玩家手类(例如在纸牌游戏中)。draw 方法将绘制另一张牌,而 showHand 方法应显示手中的当前牌。我试图在构造函数中初始化指针数组,但我不知道如何做到这一点(这是我相信我的问题的根源)。尝试现在注释掉 this->jon={}; 给出此错误:“错误:将''分配给'Card * [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];
};
4

3 回答 3

5

你的问题是悬空指针。

您更广泛的问题是使用指针。只是不要那样做。存储一组实际 Card对象。

于 2013-01-29T19:43:04.667 回答
1

数组是不可赋值的,即some_array = {}在初始化之后是非法的。

此时您的数组已经初始化。但是它确实包含垃圾,因此您需要在使用它之前初始化每个元素。

附带说明...

jon[size]=&anyCard;

那很不好。您正在存储局部变量的地址。一旦函数退出,该指针就会变得无效。

于 2013-01-29T19:43:35.767 回答
0

您正在存储局部变量的地址:

 jon[size]=&anyCard;

当它超出范围时(当函数离开时),它会被销毁。如果要将指针存储在 jon 中,则至少需要对其进行复制。

于 2013-01-29T19:44:34.947 回答