错误:当我流向cout时,'operator<'不匹配

时间:2015-04-17 21:01:25

标签: c++

我正在创建一个Matrix类,我正在重载所有基本运算符。例如:

class Matrix {
    Matrix operator<(const float& ); // returns a Matrix with
                                     // entries 0 or 1 based on
                                     // whether the element is less than
                                     // what's passed in.


};

我还写了一个流媒体运营商:

ostream &operator<<(ostream&cout,const Matrix &M){
    for(int i=0;i<M.rows;++i) {
        for(int j=0;j<M.columns;++j) {
            cout<<M.array[i][j]<<"  ";
        }
        cout<<endl;
    }
    return cout;
}

但是,当我尝试使用这些时:

int main() {
     Matrix M1;
     cout << M1 < 5.8;
}

我收到此错误:

  

错误:“operator<

中的“operator<<((* & std::cout), (*(const Matrix*)(& m))) < 5.7999999999999998e+0”不匹配

这个错误是什么意思?

1 个答案:

答案 0 :(得分:6)

左流媒体运营商<<的优先级高于比较运算符<

因此...

cout << M1 < 5.8

相当于

(cout << M1) < 5.8

http://en.cppreference.com/w/cpp/language/operator_precedence


PS。这种行为是 dumb ,但出于历史原因,我们仍然坚持使用它。 <<的初衷是数学运算(这个优先级有意义),而不是流式传输。