【发布时间】:2011-04-30 09:52:12
【问题描述】:
我有这样的课:
class test
{
vector<expr*> _exprs;
bool cmp(expr* e1, expr* e2);
ExprManager* mg;
}
比较函数是:
bool test::cmp(expr* e1, expr* e2)
{
return exprHight(mg, e1) < exprHight(mg, e2);
}
然后当我使用比较函数对_exprs(在另一个成员函数中)进行排序时
sort(_exprs->begin(), _exprs->end(), cmp);
编译报告:
error: argument of type ‘bool (test::)(void*, void*)’ does not match ‘bool (test::*)(void*, void*)’
如何解决?感谢您的提前。
【问题讨论】:
-
这不是 actual 类定义,是吗?从您的 cmets 来看,我猜它有一个析构函数,但没有复制构造函数或赋值运算符。对吗?
-
我定义了一个用外部
mg实例化的内部类,并在这个内部类中定义了operator()。现在可以使用了。 -
在我看来,这听起来像是一种不必要的复杂方法来解决损坏的类设计;)如果您的类在复制时泄漏资源(或双重释放它们),您将遇到类似的问题90% 的标准库。您应该从根本上解决问题。