繁体   English   中英

排序向量时运算符重载的编译错误

[英]Compilation error on operator overloading when sorting vector

我的课程大致定义如下。 其中,它有一个<比较运算符。

class DictionarySearchItem {

public:

    DictionarySearchItem(); 
    double relevance() const;
    bool operator<(const DictionarySearchItem& item) { return relevance() > item.relevance(); }

};

typedef std::vector<DictionarySearchItem> DictionarySearchItemVector;

然后我用这种方式使用这个类:

DictionarySearchItemVector searchItems;

for (unsigned i = 0; i < entries.size(); i++) {
    // ...
    // ...
    DictionarySearchItem item;
    searchItems.push_back(item);
}

但是当我尝试对矢量进行排序时:

std::sort(searchItems.begin(), searchItems.end());

我在使用MinGW时出现以下编译错误。

/usr/include/c++/4.2.1/bits/stl_algo.h:91: erreur : passing 'const hanzi::DictionarySearchItem' as 'this' argument of 'bool hanzi::DictionarySearchItem::operator<(const hanzi::DictionarySearchItem&)' discards qualifiers

我不太明白我的代码有什么不对,错误信息对我来说并不清楚。 使用MSVC2008编译相同的代码。 知道可能是什么问题吗?

你需要使用less-than运算符const

bool operator<(const DictionarySearchItem& item) const { ... }
                                                   ^

原因可能是sort依赖于被比较的元素不能因比较而改变的事实。 这可以通过使< comparison的两边都是const来强制执行,这意味着操作符必须是const,以及它的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM