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&);

在代码中,您尝试将 aCard和 a传递Hand*给函数,但编译器没有找到接受这些的重载。最接近的是一个接受 aCard和 a的函数const Hand&

您需要取消引用指针以获取对象:

p->draw(dealerCard, *playerHand);

或者考虑是否需要通过指针保存所有对象。如果避免使用指针,代码会简单得多。

于 2012-11-19T03:17:07.967 回答