C ++参考和指针

时间:2012-11-19 03:12:12

标签: c++ pointers reference

我的程序中有以下代码用于二十一点游戏:

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

2 个答案:

答案 0 :(得分:4)

快速修复方法是将呼叫与签名匹配:

p->draw(dealerCard, *playerHand);

正确的方法是继续执行代码并摆脱动态分配和原始指针,用智能指针替换它们。

答案 1 :(得分:1)

错误信息非常清楚(在看了几次之后):

  

错误:没有匹配函数来调用'Player :: draw(Card&,Hand *&);   注意:候选人是:虚拟bool Player :: draw(Card,const Hand&);

在代码中,您尝试将CardHand*传递给函数,但编译器未找到需要这些函数的重载。它最接近的是一个带Cardconst Hand&的函数。

您需要取消引用指针才能到达对象:

p->draw(dealerCard, *playerHand);

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