【问题标题】:Calling a method of a constant object parameter调用常量对象参数的方法
【发布时间】:2011-02-04 05:32:41
【问题描述】:

这是我失败的代码:

bool Table::win(const Card &card) {
   for (int i = 0; i < cards.size(); i++)
      if (card.getRank() == cards[i].getRank()) return true;

   return false;
}

错误消息是:将 'const Card' 作为 'int Card::getRank()' 的 'this' 参数传递会丢弃限定符。

当我得到一张卡片的副本并将代码更改为此它可以工作:

bool Table::win(const Card &card) {
   Card copyCard = card;

   for (int i = 0; i < cards.size(); i++)
      if (copyCard.getRank() == cards[i].getRank()) return true;

   return false;
}

还有其他方法吗?

【问题讨论】:

  • 能否请您发布Card-class 声明?

标签: c++ function reference constants


【解决方案1】:

getRank 是 const 方法吗?应该这样声明”:

int getRank( ) const;

假设返回类型是int。

【讨论】:

  • 那么,如果我将一个对象作为常量变量传递,我应该将它的所有方法都声明为常量吗?
  • 阅读本文以了解有关 const 的更多信息:parashift.com/c++-faq-lite/const-correctness.html
  • @pocoa - 如果一个方法不修改实例,它应该是一个const 方法。这允许在 const 实例上调用该方法。
  • 对于任何参数,如果您需要更改它[例如通过setRank() 函数],您需要将其作为非常量引用传递。
  • @JamesWierzba 谢谢,显然这已经转移到不同的位置,现在链接是:isocpp.org/wiki/faq/const-correctness
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多