【发布时间】:2011-05-03 20:30:10
【问题描述】:
我使用 std::sort() 碰壁了。我有一个纯虚拟类(名为Compare),方法的调用者从它派生(名为MyComp)。我将纯虚拟类用于我的 API 原型:
void Object::DoSort(Compare &comp) {
std::sort(this->mKeys.begin(),this->mKeys.end(), comp);
}
调用者:
class MyComp: public Compare {
bool operator()(const Row *r1, const Row *r2) { ... }
} cmp;
...
obj->DoSort(cmp);
Linux 上的 g++ 编译器抱怨:“无法分配 'Compare' 类型的对象,因为 'Compare' 类型具有抽象虚函数”
即使我将Compare 修改为简单的虚拟(非纯),std::sort() 仍然调用Compare::operator() 代码而不是MyComp::operator()。
调用 cmp(r1,r2) 可以正常编译并返回正确的结果。
我必须做错事,否则我不明白。请帮忙!
【问题讨论】: