2011-10-23 53 views
9
#include <iostream> 
#include <vector> 
#include <algorithm> 
class MyData 
    { 
    public: 
     int m_iData; 
     bool operator<(MyData rhs) { return m_iData < rhs.m_iData; } 
    }; 

int main() 
{ 
    std:: vector <MyData> myvector(2, MyData()); 
    myvector[0].m_iData=2; myvector[1].m_iData=4; 

    std::sort(myvector.begin(), myvector.end()); 
} 

试图编译这给出:错误:使 'const的T' 为 '这个' 的参数 '布尔T ::操作者<(T)' 丢弃限定符

error: passing 'const MyData' as 'this' argument of 'bool MyData::operator<(MyData)' 
discards qualifiers 
+0

请将标题中的“ - ”更改为“T”。我很难理解这个问题。 (我不知道为什么我在这个问题上没有编辑按钮,虽然...) – kay

回答

17

比较运算符将在类实例的const引用上调用,所以它必须声明为const成员函数。

它也是const的引用而不是按值传递参数很好的做法,但它并没有太大的差别为您简单的类:

bool operator<(const MyData & rhs) const { return m_iData < rhs.m_iData; } 
//    ^^^^^^^^^^^^^^  ^^^^^ 
//    if you like   mandatory 

人们普遍强烈推荐声明全部成员函数常量不会改变您的对象。这不仅传达你的意图和设计,而且也不可能在常量对象或引用上使用这些函数。

5

operator<一个应该是const对于两个参数:

bool operator<(MyData const& rhs) const { return m_iData < rhs.m_iData; } 
+0

它工作,谢谢。对于参考也有好的提示。我没有想到这一点。 –

0

你应该写操作与const操作数。看看here

相关问题