我的程序中有以下代码用于二十一点游戏:
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);
draw定义为
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&);
答案 0 :(得分:4)
快速修复方法是将呼叫与签名匹配:
p->draw(dealerCard, *playerHand);
正确的方法是继续执行代码并摆脱动态分配和原始指针,用智能指针替换它们。
答案 1 :(得分:1)
错误信息非常清楚(在看了几次之后):
错误:没有匹配函数来调用'Player :: draw(Card&,Hand *&); 注意:候选人是:虚拟bool Player :: draw(Card,const Hand&);
在代码中,您尝试将Card
和Hand*
传递给函数,但编译器未找到需要这些函数的重载。它最接近的是一个带Card
和const Hand&
的函数。
您需要取消引用指针才能到达对象:
p->draw(dealerCard, *playerHand);
或者考虑是否需要按指针保存所有对象。如果你避免使用指针,代码就会简单得多。