【问题标题】:C++ Equals OperatorC++ 等于运算符
【发布时间】:2012-11-28 01:35:01
【问题描述】:

我有以下等号运算符:

  bool operator==(const Duration& x, const Duration& y){
        return ( x.hrs == y.hrs, x.mins == y.mins, x.secs == y.secs );
    }

我也试过了:

 bool operator==(const Duration& x, const Duration& y){
        return ( (x.hrs == y.hrs) && (x.mins == y.mins) && (x.secs == y.secs) );
    }

在我的主要方法中,我有:

  //Arbitrary Durations - Testing
    Duration dTest0 (01,45,12);
    Duration dTest1 (01,35,45);
    Duration dTest2 (01,35,45);
    Duration dTest3 (01,25,05);

    if ( dTest0 == dTest1 ){
        cout<< "broken" << endl;
    }
    else{
        cout<< "working" << endl;
        }

我的程序不断输出“损坏”,这表明 dTest0 和 dTest1 实际上是相等的......我哪里出错了?

附加:如果我使用x.getHours == y.getHours...,它会在"." 下添加一条红线,并说:'错误:指向绑定函数的指针只能用于调用函数。

任何建议将不胜感激。谢谢。

【问题讨论】:

  • 第二个版本是正确的,它应该可以工作。你能在 ideone.com 上发布一个最小的例子吗?
  • 错误信息是因为如果getHours是一个方法,你必须有x.getHours()
  • 它现在与x.getHours() 一起工作我错过了()。我没有意识到他们是必需的。我是一个新手,从一本似乎没有提到这一点的书中自学。感谢您的时间@LuchianGrigore
  • @qwertyRocker 请注意,() 是“函数调用”运算符,是调用函数所必需的。唯一不需要的是将函数的值存储在指针中时 (durFunc = Duration::getHours;)。因此,每当您需要调用(执行、运行、执行,无论您想查看它)一个函数时,请确保包含 () 函数运算符。
  • @izuriel 好的,这是一个很好的解释,非常感谢。我很高兴我问了这个问题。现在一切都清楚多了。再次感谢:D

标签: c++ equals-operator


【解决方案1】:

第一个实现只有在x.secs == y.secs 时才会返回true。前两次比较的结果将被丢弃。 , 运算符的计算结果为其第二个操作数的值,在这种情况下归结为 x.secs == y.secs

然而,第二个是正确的。如果它不起作用,那么您必须在Duration的构造函数中错误地设置了hrsminssecs的值。

getHours 的问题是您需要调用它。毕竟是成员函数。 x.getHours() 而不是 x.getHours 也是如此。

【讨论】:

  • 这是我的问题(忘记添加())。谢谢你解释它。我会在允许的情况下尽快标记为正确。干杯。
  • @qwertyRocker,那么误报的问题是什么?
  • @chris 问题与 Sftrabbit 上面描述的完全一样。我使用的是x.sec,它总是返回true,当我尝试x.getSecs它不会编译。我错过了(),我应该使用x.getSecs()。由于将它们更改为正确的方法名称,它应该可以正常工作:D
  • @qwertyRocker,为什么x.secs 不工作呢?是不是和getSecs()返回的值不一样?
【解决方案2】:

第一个是错误的。 , 不能那样工作。

第二个是正确的,假设Duration 是合理的。

您的Duration 构造函数中可能存在错误。我什至认为这很有可能。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2019-07-06
    • 1970-01-01
    • 2022-09-24
    • 2010-12-19
    • 2015-10-22
    • 2011-08-09
    • 2011-05-04
    • 2018-01-07
    相关资源
    最近更新 更多