C ++排序对象的向量,得到错误C3867函数调用缺少参数列表?

时间:2015-11-27 02:26:29

标签: c++ sorting vector

我目前正在编写一个检测车牌文字的程序。我有一个带有成员变量的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 structs

sort vector of struct element

Sorting a vector of objects in C++

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

1 个答案:

答案 0 :(得分:4)

发布的代码有几个问题。

首先,传递给std::sort的函数必须可以使用被排序类型的两个参数进行调用。 PossiblePlate::sortDescendingByNumberOfChars是一个非静态成员函数,因此必须在PossiblePlate类型的对象上调用它,并附加两个参数。 std::sort无法解决这个问题。使其成为静态成员函数。

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

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