Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;对对象向量排序,获取错误C3867函数调用缺少参数列表?_C++_Sorting_Vector - Fatal编程技术网

C++ C++;对对象向量排序,获取错误C3867函数调用缺少参数列表?

C++ C++;对对象向量排序,获取错误C3867函数调用缺少参数列表?,c++,sorting,vector,C++,Sorting,Vector,我目前正在写一个程序来检测车牌文本。我有一个包含成员变量的类PossiblePlate,在主要的一点上,我想按照模板中检测到的字符数,按降序对PossiblePlate对象的向量进行排序,该模板位于成员变量strChars中。以下是相关代码: 大体上: std::sort(vectorOfPossiblePlates.begin(), vectorOfPossiblePlates.end(), PossiblePlate::sortDescendingByNumberOfChars); Pos

我目前正在写一个程序来检测车牌文本。我有一个包含成员变量的类PossiblePlate,在主要的一点上,我想按照模板中检测到的字符数,按降序对PossiblePlate对象的向量进行排序,该模板位于成员变量strChars中。以下是相关代码:

大体上:

std::sort(vectorOfPossiblePlates.begin(), vectorOfPossiblePlates.end(), PossiblePlate::sortDescendingByNumberOfChars);
PossiblePlate.h(到目前为止,我可能会添加更多):

main中的第44行是上面main中调用std::sort的行

我以前在其他程序中也做过同样的事情,没有问题。我在这里所做的一切都与我过去所做的一致,也与其他堆栈溢出帖子一致,例如:


谁能告诉我我做错了什么?我在这里不知所措,任何帮助都将不胜感激。

发布的代码中有几个问题

首先,传递给
std::sort
的函数必须可以用两个排序类型的参数调用
PossiblePlate::sortDescendingByNumberOfChars
是一个非静态成员函数,因此必须对类型为
PossiblePlate
的对象调用它,并使用两个附加参数<代码>标准::排序无法处理此问题。使其成为静态成员函数

其次,PossiblePlate.cpp定义了一个名为
sortDescendingByNumberOfChars
的自由函数;没关系,但这不是成员函数。将其声明从
sortDescendingByNumberOfChars
更改为
PossiblePlate::sortDescendingByNumberOfChars
,以定义成员函数


第三,遵循错误消息中的建议。要获取成员函数的地址,正确的语法是
&ClassName::FunctionName
。代码中的调用没有
&

已发布的代码中有几个问题

首先,传递给
std::sort
的函数必须可以用两个排序类型的参数调用
PossiblePlate::sortDescendingByNumberOfChars
是一个非静态成员函数,因此必须对类型为
PossiblePlate
的对象调用它,并使用两个附加参数<代码>标准::排序无法处理此问题。使其成为静态成员函数

其次,PossiblePlate.cpp定义了一个名为
sortDescendingByNumberOfChars
的自由函数;没关系,但这不是成员函数。将其声明从
sortDescendingByNumberOfChars
更改为
PossiblePlate::sortDescendingByNumberOfChars
,以定义成员函数


第三,遵循错误消息中的建议。要获取成员函数的地址,正确的语法是
&ClassName::FunctionName
。代码中的调用没有应答的
&

,std::sort不能与非静态成员函数一起工作。使用静态函数的替代方法是lambda函数或functor(函数运算符)。@rcgldr-或使用自由函数,如PossiblePlate.cpp中定义的函数。但这不是这个问题的重点。我只是想提醒OP潜在的问题和备选方案。正如所回答的,std::sort不能用于非静态成员函数。使用静态函数的替代方法是lambda函数或functor(函数运算符)。@rcgldr-或使用自由函数,如PossiblePlate.cpp中定义的函数。但这不是这个问题的重点。我只是想提醒OP潜在的问题和替代方案。
// 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

#include "PossiblePlate.h"


///////////////////////////////////////////////////////////////////////////////////////////////////
bool sortDescendingByNumberOfChars(const PossiblePlate &ppLeft, const PossiblePlate &ppRight) {
    return(ppLeft.strChars.length() < ppRight.strChars.length());
}
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