2016-04-30 37 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') –