我目前正在编写一个程序来检测车牌文本。我有一个带有成员变量的 PossiblePlate 类,在 main 中的某个时刻,我想按成员变量 strChars 中检测到的板中字符数按降序对 PossiblePlate 对象的 vector 进行排序。相关代码如下:
主要是:
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 行是上面调用 std::sort 的 main 中的行。
我以前在其他程序中做过同样的事情,没有问题。我在这里所做的一切都与我过去的做法以及其他 Stack Overflow 帖子的做法一致,例如:
Sorting a vector of objects in C++
谁能告诉我我做错了什么?我在这里不知所措,非常感谢任何帮助。
最佳答案
发布的代码中有几个问题。
首先,传递给 std::sort
的函数必须可以用两个被排序类型的参数调用。 PossiblePlate::sortDescendingByNumberOfChars
是一个非静态成员函数,因此必须在 PossiblePlate
类型的对象上调用它,并带有两个附加参数。 std::sort
无法应对。使其成为静态成员函数。
其次,PossiblePlate.cpp 定义了一个名为sortDescendingByNumberOfChars
的免费函数;没关系,但这不是成员函数。将其声明从 sortDescendingByNumberOfChars
更改为 PossiblePlate::sortDescendingByNumberOfChars
以定义成员函数。
第三,按照错误消息中的建议进行操作。要获取成员函数的地址,正确的语法是&ClassName::FunctionName
。代码中的调用没有&
。
关于C++ 对对象 vector 进行排序,出现错误 C3867 函数调用缺少参数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949465/