2016-04-30 13 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); 

私はこのありません、適切な変換エラー:: Cでのソート++

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

我々あなたのコードから何かを逃してください。ピクセルはどこに定義されていますか? – Zzirconium

+0

テンプレート class PointGeneric { public: –

+0

比較関数は、入力const Pixel *を取ります。 orベターなぜピクセルエラーを取得していますかわからないiFillPoints – Matteo

答えて

2

あなたcompare機能は、おそらくより

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

のようになります。実行したときに、私はこのエラーを取得std::sortアルゴリズムは、コンテナの要素(ポインタではなくclPoint)を渡します(もちろんvoidポインタではありません)。値の代わりに参照によってclPointオブジェクトを受け入れることができます。これにより、ボイドポインタからキャストする必要もなくなります。

関数はboolを返す必要があります。 i.x() - j.x()は、元々intまたはdoubleで、boolではないため、参考にならない可能性があります。これらの値はboolに変換され、0の場合はfalse、そうでない場合はtrueに変換されます。入力が等しい場合はfalse、それ以外の場合はtrueを返します。std::sortの比較関数はまったく同じではありません。より小さい演算子は正しいセマンティクスを与えます。

M.M.コメント-この中に良い点は、clPointx()方法がconst宣言されていない場合は動作するので、必ずそれがあることはありません提起(PointGenericのクラス宣言内の署名がType x() const;のようなものを好きなはずです。)

+0

良い設計のために、コンパレータは 'const'でなければなりません(もしOPがそれを見落とすなら' x() 'も' const'にする必要があります) –

関連する問題