2016-04-30 99 views
0
bool COMPARE(const void * i, const void * j) 
{ return (((clPoint*)i)->x() - ((clPoint*)j)->x()); } 


std::vector<clPoint> iFillPoints; 


std::sort(iFillPoints.begin(), iFillPoints.end(), COMPARE); 

我得到这个错误,当我运行此使用,而使用std ::排序在C++

Error 16 error : no suitable conversion function from "Pixel" to "const void *" exists 
+0

我们错过了你的代码。 Pixel在哪里定义? – Zzirconium

+0

template class PointGeneric { public: –

+0

比较函数应该在输入const Pixel *; 或者更好的同类型iFillPoints – Matteo

回答

2

compare功能应该看起来可能更像

bool COMPARE(const clPoint& i, const clPoint& j) 
{ return i.x() < j.x(); } 

无合适的转换错误算法会传入容器的元素,它们是clPoint,而不是指针(肯定不是空指针)。您可以通过引用而不是值来接受clPoint对象。这也消除了抛弃void指针的需要。

函数应该返回一个bool;您原本拥有的i.x() - j.x()可能是intdouble,而不是bool,因此不会有帮助。这些转换为boolfalse为0值,其他为true:因此,当输入相等时,您的函数将返回false,否则返回true,这完全不同于std::sort的比较函数应该看起来的样子。小于运算符给出正确的语义。

M.M.提出了在一个好点的意见,这个如果clPointx()方法未声明const将无法​​正常工作,所以一定要确保它(的PointGeneric类声明中签名谨类似Type x() const;。)

+0

对于好的设计,比较器应该是'const'(如果OP忽略这样做,可能需要将'x()'做成'const') –