Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ 使用我自己的list.sort()逻辑,试图模拟其他源,为什么我会因为似乎正确的格式设置而出错?_C++_List_Sorting - Fatal编程技术网

C++ 使用我自己的list.sort()逻辑,试图模拟其他源,为什么我会因为似乎正确的格式设置而出错?

C++ 使用我自己的list.sort()逻辑,试图模拟其他源,为什么我会因为似乎正确的格式设置而出错?,c++,list,sorting,C++,List,Sorting,我也尝试过其他一些方法,比如创建一个结构,为比较器创建一个单独的类,因为我在网上找到了这些方法的例子,但没有成功。所以我回到这个方法上来,因为它看起来是最简单的,但即使在这里模拟stackoverflow上的其他问题,我也无法让它运行 我有一个特定的实例,在这个实例中,我需要比较的不是节点的默认值,而是它们都存储的另一个数据成员(恰好是int)。因此,我尝试使用自己的compare with std::list.sort()进行比较,但它给了我以下两个编译器错误: error C3867: 'T

我也尝试过其他一些方法,比如创建一个结构,为比较器创建一个单独的类,因为我在网上找到了这些方法的例子,但没有成功。所以我回到这个方法上来,因为它看起来是最简单的,但即使在这里模拟stackoverflow上的其他问题,我也无法让它运行

我有一个特定的实例,在这个实例中,我需要比较的不是节点的默认值,而是它们都存储的另一个数据成员(恰好是int)。因此,我尝试使用自己的compare with std::list.sort()进行比较,但它给了我以下两个编译器错误:

error C3867: 'ThreadedBST<std::string>::compareAscendFreq': function call missing argument list; use '&ThreadedBST<std::string>::compareAscendFreq' to create a pointer to member

 error C2660: 'std::list<node<T>,std::allocator<_Ty>>::sort' : function does not take 1 arguments
这正是我找到的每一个参考资料告诉我如何去做的。至少可以说,我很困惑为什么它不能正常工作

编辑:如果有必要,这里是我的标题声明

bool compareAscendFreq(const node<T>&, const node<T>&);
bool compareAscendFreq(const node&,const node&);
EDIT2:第一个错误通过使其成为独立函数得到解决。第二个错误仍然存在:

error C2660: 'std::list<node<T>,std::allocator<_Ty>>::sort' : function does not take 1 arguments
1>          with
1>          [
1>              T=std::string
1>  ,            _Ty=node<std::string>
1>          ]
错误C2660:'std::list::sort':函数不接受1个参数
1> 与
1>          [
1> T=std::string
1> ,_Ty=节点
1>          ]
sort
需要一个双参数比较函数


没有理由使
compareAscendFreq
成为类的成员;使其成为独立函数。

比较函数是非成员函数还是静态成员函数?它必须是两个中的一个。它不能是非静态成员函数。不能将成员函数作为比较器传递。它需要是一个自由函数。请原谅我的无知,但不要对比较函数进行排序。当两个对象相等时,比较函数也需要发出信号,不仅仅是?@asawyer:Nope--
列表的排序需要
operator@Milan:还请注意,在大多数情况下,
vector
优于
list
可能会更好。这解决了第一个关于“缺少参数列表”的错误。第二个错误仍然存在错误C2660:'std::list::sort':函数不接受1个参数“@Milan:某种原因导致类型推断失败,从而从候选集中截取一个比较函数,从而切断了重载。例如,您需要传递
&compareAscendFreq
,其中T是列表中的节点类型。参数推导仅针对比较函数类型进行,而不是针对该比较函数中的参数。可以将比较器设置为非成员并将其内联,也可以将其设置为静态成员函数。这两种选择都应该有效。
bool compareAscendFreq(const node<T>&, const node<T>&);
error C2660: 'std::list<node<T>,std::allocator<_Ty>>::sort' : function does not take 1 arguments
1>          with
1>          [
1>              T=std::string
1>  ,            _Ty=node<std::string>
1>          ]
ThreadedBST<std::string>::compareAscendFreq
a.compareAscendFreq(b, c);