我正在制作一个程序,允许用户从文件夹中选择.bmp,然后根据与所选图像的相似程度在文件夹中显示其他图片。因此,我创建了一个比较两个位图并返回分数的函数

double compareImages(HBITMAP pic1,HBITMAP pic2);


分数越高,两张图片越相似。

我还创建了一个矢量,用于保存文件夹中每张图片的实例的句柄

std::vector<HBITMAP> pictures;


现在,我要根据与所选图片相比它们的得分对矢量中的手柄进行排序。高分应该放在首位。

std::sort(pictures.begin(),pictures.end(),[](const HBITMAP& pic1,const HBITMAP& pic2) -> bool
{
double comp1 = compareImages(pic1,selectedPicture); //the score of pic1
double comp2 = compareImages(pic2,selectedPicture); //the score of pic2
return comp1>comp2;
}
);


出现错误:

||=== Build: Debug in imageComparator (compiler: GNU GCC Compiler) ===|

C:\Users\GS\Desktop\Programy\imageComparator\src\leftWindow.h||In function 'LRESULT WindowProcedureLeft(HWND, UINT, WPARAM, LPARAM)':|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|133|warning: lambda expressions only available with -std=c++11 or -std=gnu++11|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|error: no matching function for call to 'sort(std::vector<HBITMAP__*>::iterator, std::vector<HBITMAP__*>::iterator, WindowProcedureRight(HWND, UINT, WPARAM, LPARAM)::<lambda(HBITMAP__* const&, HBITMAP__* const&)>)'|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|note: candidates are:|

C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algo.h|4676|note: template<class _RAIter> void std::sort(_RAIter, _RAIter)|

C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algo.h|4676|note:   template argument deduction/substitution failed:|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|note:   candidate expects 2 arguments, 3 provided|

C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algo.h|4705|note: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)|

C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algo.h|4705|note:   template argument deduction/substitution failed:|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|required from here|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|error: template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'WindowProcedureRight(HWND, UINT, WPARAM, LPARAM)::<lambda(HBITMAP__* const&, HBITMAP__* const&)>'|

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|error:   trying to instantiate 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)'|


重要的位可能是:

C:\Users\GS\Desktop\Programy\imageComparator\src\rightWindow.h|134|error: template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'WindowProcedureRight(HWND, UINT, WPARAM, LPARAM)::<lambda(HBITMAP__* const&, HBITMAP__* const&)>'|


什么是错的,是什么

local type 'WindowProcedureRight(HWND, UINT, WPARAM, LPARAM)::<lambda(HBITMAP__* const&, HBITMAP__* const&)>


其实是什么意思?

最佳答案

重要的一点是


  “ C:\ Users \ GS \ Desktop \ Programy \ imageComparator \ src \ rightWindow.h | 133 |警告:lambda表达式仅适用于-std = c ++ 11或-std = gnu ++ 11 |”


您应该使用消息中提到的编译器开关打开C ++ 11功能。

另外,我想您正在进行的比较可能会很慢。一次计算所有图像分数,然后使用缓存的结果进行排序可能是明智的。

10-04 12:34
查看更多