无法在c ++中编译min_element

时间:2010-05-25 10:31:37

标签: c++

这是我的代码:

#include <algorithm>
#include <vector>
#include <string>
using namespace std;
class A {
  struct CompareMe {
    bool operator() (const string*& s1, const string*& s2) const { return true; }
  };
  void f() {
    CompareMe comp;
    vector<string*> v;
    min_element(v.begin(), v.end(), comp);
  }
};

这就是错误:

error: no match for call to ‘(A::CompareMe) (std::string*&, std::string*&)’
test.cpp:7: note: candidates are: bool A::CompareMe::operator()(const 
std::string*&, const std::string*&) const

我觉得有一些语法缺陷,但无法找出哪一个。请帮助!

2 个答案:

答案 0 :(得分:4)

const的展示位置错误。 A T*& cannot be implicitly converted to a const T*&。尝试

bool operator() (const string* const& s1, const string* const& s2) const { ...
//                             ^^^^^                    ^^^^^

代替。


或者只是按值传递(感谢Mike):

bool operator() (const string* s1, const string* s2) const { ...
如果编译器使用标准ABI,

对于像指针这样的简单对象会更有效。

答案 1 :(得分:2)

(这应该是一个评论,但评论不能这样格式化,所以它必须是一个答案。)

编译器的错误消息非常有用。只需将编译器所说的内容与它所说的内容对齐:

(      std::string*&,       std::string*&)
(const std::string*&, const std::string*&)

很明显是什么问题,不是吗?