1

ブラックジャック ゲームのプログラムに次のコードがあります。

Player *p;
Deck *d = new Deck();
Hand *playerHand = new Hand(), *dealerHand = new Hand();
p = get_Simple();  //This returns a pointer to an instance of a Simple Player for my game
Card dealerCard = d->deal();
p->draw(dealerCard, playerHand);

描画は次のように定義されます

virtual bool draw(Card dealer, const Hand &player);

このコードを実行しようとすると、次のエラーが発生します。

error: no matching function for call to 'Player::draw(Card&, Hand*&);
note: candidates are: virtual bool Player::draw(Card, const Hand&);
4

2 に答える 2

4

簡単な修正は、呼び出しを署名と一致させることです。

p->draw(dealerCard, *playerHand);

正しい方法は、コードを調べて、動的割り当てと生のポインターを取り除き、それらをスマート ポインターに置き換えることです。

于 2012-11-19T03:14:36.687 に答える
1

エラーメッセージは非常に明確です(数回見た後):

エラー: 'Player::draw(Card&, Hand*&); の呼び出しに一致する関数がありません。注: 候補は次のとおりです。 virtual bool Player::draw(Card, const Hand&);

Cardコードで aと aを関数に渡そうとしてHand*いますが、コンパイラはそれらを取るオーバーロードを見つけられませんでした。Card最も近いのは、 aと aを取る関数ですconst Hand&

オブジェクトに到達するには、ポインターを逆参照する必要があります。

p->draw(dealerCard, *playerHand);

または、すべてのオブジェクトをポインターで保持する必要があるかどうかを検討してください。ポインターを避けると、コードははるかに単純になります。

于 2012-11-19T03:17:07.967 に答える