错误C2679:二进制'<<' :找不到哪个运算符采用了'Rectangle'类型的右手操作数(或者没有可接受的转换)

时间:2009-09-22 17:07:43

标签: c++

我需要编写一个函数来重载==运算符来比较宽度,高度和颜色。我需要返回'Y',如果它相等,如果不是,则返回'N'。

这是我认为正确的代码,但一直给我错误:

  

错误C2679:二进制'<<' :找不到哪个运算符采用了'Rectangle'类型的右手操作数(或者没有可接受的转换)

我已经搜索了一个答案,并没有接近比较3个数据,因为大多数例子用于比较2个数据。

#include <iostream>
#include <string>
using namespace std;

class Rectangle
{
private:
    float width;
    float height;
    char colour;
public:
    Rectangle()
    {
        width=2;
        height=1;
        colour='Y';
    }
    ~Rectangle(){}
    float getWidth() { return width; }
    float getHeight() { return height; }
    char getColour() { return colour; }

    Rectangle(float newWidth, float newHeight, char newColour)
    {
        width = newWidth;
        height = newHeight;
        colour = newColour;
    }

    char operator== (const Rectangle& p1){

        if ((width==p1.width) && (height==p1.height) && (colour==p1.colour))
            return 'Y';
        else
            return 'N';
    }
};

int main(int argc, char* argv[])
{
    Rectangle rectA;
    Rectangle rectB(1,2,'R');
    Rectangle rectC(3,4,'B');
    cout << "width and height of rectangle A is := " << rectA.getWidth() << ", " << rectA.getHeight() << endl;
    cout << "Are B and C equal? Ans: " << rectB==rectC << endl;


    return 0;
}

2 个答案:

答案 0 :(得分:8)

“&LT;&LT;”优先级高于“==”。将您的比较放在括号中:

cout << "Are B and C equal? Ans: " << (rectB == rectC) << endl;

答案 1 :(得分:3)

看起来你需要一些括号:

cout << "Are B and C equal? Ans: " << (rectB==rectC) << endl;

这是运营商优先问题;在<<运行之前,rectB已应用于==