【问题标题】:Cannot convert 'Class::operator==' from type 'bool (Class::)(Class*) to type 'bool [closed]无法将 'Class::operator==' 从类型 'bool (Class::)(Class*) 转换为类型 'bool [关闭]
【发布时间】:2020-02-10 23:35:44
【问题描述】:

我正在做一个方法来看看两张牌是否有相同的数字或花色

这是我的重载运算符和我调用重载运算符的方法

bool Carta::operator==(Carta *c){
   if(getNumCarta()==c->getNumCarta() || getNumPal()==c->getNumPal()){
        return true;
    }
    else{
        return false;
    }
    //return(numCarta==c->numCarta)||(numPal!==c->numPal);
}

bool Carta::operator!=(Carta *c){
    if(getNumCarta()!=c->getNumCarta() && getNumPal()!=c->getNumPal()){
        return true;
    }
    else{
        return false;
    }
}

bool Table::pairs(){

    for(int i=1;i<posFull;i++){

        if(t[i-1]->operator == t[i+1]){
            return true;
        }
    }
    return false;
}

我希望返回一个 true 但永远不会发生

【问题讨论】:

  • 投票结束为错字。 t[i-1]-&gt;operator==(t[i+1]) 如果你真的想坚持显式调用操作员。或者,更常规地,*t[i-1] == t[i+1]。 (更传统的做法是不采用指针而是采用引用,因此运算符是对称的:*t[i-1] == *t[i+1])。
  • 进一步,if (x) return true; else return false; 就是return x;
  • 是的!谢谢。第一和第二有什么区别?
  • 可读性...在上述函数中,将其设为function(const Carta* c) const,因为您不会更改 lhs 或 rhs
  • 代替if(getNumCarta()!=c-&gt;getNumCarta() &amp;&amp; getNumPal()!=c-&gt;getNumPal()){ return true; } else { return false; } - 只需:return getNumCarta() != c-&gt;getNumCarta() &amp;&amp; getNumPal() != c-&gt;getNumPal();

标签: c++ class operator-overloading equality-operator


【解决方案1】:

看来你的意思

if(t[i-1]->operator ==( t[i+1]) ){

或者你可以写

if( *t[i-1] == t[i+1] ){

然而这个操作符声明

bool operator==(Carta *c);

只会让代码的读者感到困惑。最好将运算符声明为

bool operator ==( const Carta &c ) const;

并像使用它

if( *t[i-1] == *t[i+1] ){

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多