sort函数出错“应输入 2 个参数,却提供了 3 个”

张京林要加油 2015-05-08 01:48:05
我想写一个类的成员函数用于做排序,sort函数的第三个参数compare_degree()是一个比较函数,我想把他封装到类成员函数里面,但是程序报错如下:
错误 1 error C3867: “matrix::compare_degree”: 函数调用缺少参数列表;请使用“&matrix::compare_degree”创建指向成员的指针 f:\work\project1\project1\test.cpp 45 1 Project1
错误 2 error C2780: “void std::sort(_RanIt,_RanIt)”: 应输入 2 个参数,却提供了 3 个 f:\work\project1\project1\test.cpp 45 1 Project1
于是,我尝试把这个比较函数写在类的外面,重写了一个compare()的比较函数在却可以编译通过,请问各位大侠这是为什么呢?
#include <vector>
#include <algorithm>

using namespace std;

struct node
{
int index;//节点序号
int degree;//节点度
};
class matrix
{
public:
matrix();
~matrix();
vector<node> sort_degree();
bool compare_degree(node node_a, node node_b);
private:
vector<node> nodes;
};
bool compare(node node_a, node node_b);

matrix::matrix()
{
}

matrix::~matrix()
{
}

bool matrix::compare_degree(node node_a, node node_b)
{
//按照节点度降序排列
return (node_a.degree > node_b.degree);
}
bool compare(node node_a, node node_b)
{
//按照节点度降序排列
return (node_a.degree > node_b.degree);
}
vector<node> matrix::sort_degree()
{
vector<node> temp_nodes = nodes;
//根据compare_degree规定的规则对数组内的节点排序
sort(temp_nodes.begin(), temp_nodes.end(), compare_degree);
sort(temp_nodes.begin(), temp_nodes.end(), compare);
return temp_nodes;
}


int main(void)
{
matrix G;
vector<node> G_degree_rank;

G_degree_rank = G.sort_degree();
}
...全文
742 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
张京林要加油 2015-05-09
  • 打赏
  • 举报
回复
引用 2 楼 a30037338 的回复:
compare_degree compare 成员函数第一个参数默认是this指针, 所以这两个函数其实是3个参数 加static 静态函数就没有this指针
是的,17行改为如下就可以了
static bool compare_degree(node node_a, node node_b);
此后三年 2015-05-08
  • 打赏
  • 举报
回复
compare_degree compare 成员函数第一个参数默认是this指针, 所以这两个函数其实是3个参数 加static 静态函数就没有this指针
假正经的班长 2015-05-08
  • 打赏
  • 举报
回复
要想取类成员函数,作为参数,该函数必须是static的。你把compare 声明加上static试试看

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧