C++ 对对象 vector 进行排序,出现错误 C3867 函数调用缺少参数列表?

标签 c++ sorting vector

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

sort vector of struct element

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/

相关文章:

c++ - 带有功能支持的 Postfix 的中缀

c - 在 C 中对链表进行排序

python - 如何使用 Python 获得 "reasonable"字符串排序?

c++ - 填充 std::vector 时出现 "vector<T> too long"错误

C++:在循环内部或外部声明一个 vector

c++ - 使用 *this 作为返回值

c++ - 为什么下面的程序在不使用互斥量时不混合输出?

c++ - 为 Visual Studio C++ 静态库强制导出名称

JavaScript 排序国家数组

r - 向量化嵌套 for 循环,R