-1

プレイヤーの手であるクラスを作ろうとしています(例:カードゲーム)。drawメソッドは別のカードを描画し、showHandメソッドは現在のカードを手札に表示する必要があります。コンストラクターでポインターの配列を初期化しようとしましたが、これを行う方法がわかりません(これが私の問題の原因であると私は信じています)。今コメントアウトされたこれを試してみてください->jon= {}; このエラーが発生します:「エラー:''を'カード*[12]'に割り当てる際に互換性のないタイプ」

***現在、showHandにいるときに、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 に答える