重载运算符<<和操作员!=

时间:2014-05-01 18:35:11

标签: c++ operator-overloading

我遇到运算符在c ++中重载的问题。 我有结构代表复数,我正在重载运算符,所以我可以用复数进行计算。 Visual Studio 2012给出了这个错误: 1智能感知:没有运算符“!=”匹配这些操作数 操作数类型是:std :: ostream!= Complex

my!=功能代码

bool operator!=(const Complex& lhs, const Complex& rhs)
{
    if( lhs.Real() != rhs.Real() || lhs.Imaginary() != rhs.Imaginary() )
    {
        return true;
    }
    else
    {
        return false;
    }
}

<<代码

std::ostream& operator<<(std::ostream& stream,  const Complex& number)
{
    stream << number.Real() << "+" << number.Imaginary() << "i" << endl;

    return stream;
}

主:

int main()
{
    Complex c1(1,5),c2(5,6);

    cout << c1 != c2;

    system("pause"); 

    return 0;
}

如果我这样做

cout << (c1 != c2);

它没有给我任何错误。 有没有人知道如何解决这个问题,而无需添加括号?

1 个答案:

答案 0 :(得分:3)

如果您的错误发生在

cout << c1 != c2

这是一个优先问题。它被解析为

(cout << c1) != c2
如果你真的无法忍受额外的parens的样子。你可以做到

cout << operator!=(c1, c2);

但是我希望你不关心它的外观