我目前正在编写一个检测车牌文字的程序。我有一个带有成员变量的PossiblePlate类,在main中的一个点我想按照在板中检测到的字符数的降序排序一个PossiblePlate对象的向量,这是在成员变量strChars中。以下是相关代码:
在main中:
std::sort(vectorOfPossiblePlates.begin(), vectorOfPossiblePlates.end(), PossiblePlate::sortDescendingByNumberOfChars);
PossiblePlate.h(到目前为止,我可能会添加更多内容):
// PossiblePlate.h
#ifndef POSSIBLEPLATE_H
#define POSSIBLEPLATE_H
#include <string>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
///////////////////////////////////////////////////////////////////////////////////////////////////
class PossiblePlate {
public:
// member variables ///////////////////////////////////////////////////////////////////////////
cv::Mat imgPlate;
cv::Mat imgGrayscale;
cv::Mat imgThresh;
std::vector<cv::RotatedRect> locationOfPlateInScene;
std::string strChars;
///////////////////////////////////////////////////////////////////////////////////////////////////
bool sortDescendingByNumberOfChars(const PossiblePlate &ppLeft, const PossiblePlate &ppRight);
};
#endif // end #ifndef POSSIBLEPLATE_H
这里是PossiblePlate.cpp(到目前为止,我可以添加更多)
// PossiblePlate.cpp
#include "PossiblePlate.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
bool sortDescendingByNumberOfChars(const PossiblePlate &ppLeft, const PossiblePlate &ppRight) {
return(ppLeft.strChars.length() < ppRight.strChars.length());
}
当我使用Visual Studio 2013运行时,我收到以下错误:
Error 1 error C3867: 'PossiblePlate::sortDescendingByNumberOfChars': function call missing argument list; use '&PossiblePlate::sortDescendingByNumberOfChars' to create a pointer to member c:\visualstudio2013progs\cpp\licenseplaterecognition1\main.cpp 44 1 LicensePlateRecognition
main中的第44行是上面main中调用std :: sort。
的行我之前在其他程序中做过同样的事情没有问题。我在这里所做的一切都与我过去以及其他Stack Overflow帖子的完成方式一致:
Sorting a vector of objects in C++
有谁能告诉我我做错了什么?我在这里不知所措,任何帮助都将不胜感激。
答案 0 :(得分:4)
发布的代码有几个问题。
首先,传递给std::sort
的函数必须可以使用被排序类型的两个参数进行调用。 PossiblePlate::sortDescendingByNumberOfChars
是一个非静态成员函数,因此必须在PossiblePlate
类型的对象上调用它,并附加两个参数。 std::sort
无法解决这个问题。使其成为静态成员函数。
其次,PossiblePlate.cpp定义了一个名为sortDescendingByNumberOfChars
的自由函数;没关系,但它不是会员功能。将其声明从sortDescendingByNumberOfChars
更改为PossiblePlate::sortDescendingByNumberOfChars
以定义成员函数。
第三,按照错误消息中的建议操作。要获取成员函数的地址,正确的语法是&ClassName::FunctionName
。代码中的调用没有&
。