C++引用和指针

C++ References and Pointers

本文关键字:指针 引用 C++      更新时间:2023-10-16

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

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

快速解决方法是将调用与签名匹配:

p->draw(dealerCard, *playerHand);

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

错误消息非常清楚(看了几次后):

错误:调用"玩家::d原始(卡&,手*&)没有匹配函数; 注:考生为:虚拟布尔玩家::d raw(卡,常量手&);

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

您需要取消引用指针才能访问对象:

p->draw(dealerCard, *playerHand);

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