C++ 应调用对非静态成员的引用 类解决方案{ 公众: 布尔公司(内部和a、内部和b){ 返回a>b; } int findKthLargest(向量和nums,int k){ 向量向量=nums; 排序(vec.begin(),vec.end(),comp);//错误:应调用对非静态成员的引用 cout

C++ 应调用对非静态成员的引用 类解决方案{ 公众: 布尔公司(内部和a、内部和b){ 返回a>b; } int findKthLargest(向量和nums,int k){ 向量向量=nums; 排序(vec.begin(),vec.end(),comp);//错误:应调用对非静态成员的引用 cout,c++,C++,问题是您正在将一个成员函数传递给std::sort,因为它是一个成员函数,所以您需要一个实例来调用它 你有一些解决办法 传递非成员函数。这可以是自由函数或静态函数 使用lambda 使用std::bind 使用标准库比较函数对象 附言: 正如其他人已经指出的那样,在comp中使用引用并确保在findktlargest函数中您实际返回了一些内容是没有意义的。问题在于您正在将成员函数传递给std::sort,因为它是一个成员函数,所以您需要一个实例来调用它 你有一些解决办法 传递非成员函数。这可以是

问题是您正在将一个成员函数传递给
std::sort
,因为它是一个成员函数,所以您需要一个实例来调用它

你有一些解决办法

  • 传递非成员函数。这可以是自由函数或静态函数

  • 使用lambda

  • 使用std::bind
  • 使用标准库比较函数对象
  • 附言:
    正如其他人已经指出的那样,在
    comp
    中使用引用并确保在
    findktlargest
    函数中您实际返回了一些内容是没有意义的。

    问题在于您正在将成员函数传递给
    std::sort
    ,因为它是一个成员函数,所以您需要一个实例来调用它

    你有一些解决办法

  • 传递非成员函数。这可以是自由函数或静态函数

  • 使用lambda

  • 使用std::bind
  • 使用标准库比较函数对象
  • 附言:
    正如其他人已经指出的,在<代码> COMP>代码中没有使用引用的意义,并且在您的<代码> FikkthStimult函数中确实返回了一些东西。在C++中,

    < P>,排序函数需要一个静态函数返回<代码> Boo.<代码>,但是<代码> COMP是解决方案< /Cord>类的成员。(
    bool解决方案::comp(int&,int&)
    )。 最简单的方法是将
    comp
    设为静态函数

    static bool comp(内部和a、内部和b){
    返回a>b;
    
    在C++中,排序函数需要静态函数返回<代码>布尔O/COD>,但是 COMP >是<代码>解决方案< /Cord>类(<代码>布尔解决方案::COMP(int,int & <)/代码>)的成员。 最简单的方法是将
    comp
    设为静态函数

    static bool comp(内部和a、内部和b){
    返回a>b;
    
    }
    您是否尝试按照错误消息所述执行操作?您是否尝试创建
    comp
    静态成员函数?仅供参考,
    comp
    存在于
    中,如
    std::greater
    .1)创建
    comp
    静态将修复错误。2)
    std::sort(s.begin()、s.end()、std::greater())
    是编写代码的一种更简洁的方法3)类似于
    int n=nums.size();std::nth_元素(nums.begin(),nums.begin()+(n-k),nums.end());返回nums[n-k];
    将为您提供更好的复杂性
    comp
    的参数作为引用也没有意义,它们绝对不应该是可变引用。将它们更改为
    int
    。正如其他人所说,您也可以使用
    std::greater
    而不是您自己的函数。您还可以使用lambda:
    [](int a,int b){return a>b;}
    您是否尝试按照错误消息所述执行操作?是否尝试创建
    comp
    a
    static
    成员函数?仅供参考,
    comp
    作为
    std::morer
    存在于
    中。1)创建
    comp
    静态将修复错误。2)
    std::sort(s.begin()、s.end()、std::morer()))
    是编写代码的一种更简洁的方法3)类似于
    int n=nums.size();std::nth_元素(nums.begin(),nums.begin()+(n-k),nums.end());返回nums[n-k];
    将为您提供更好的复杂性
    comp
    的参数作为引用也没有意义,它们绝对不应该是可变引用。将它们更改为
    int
    。正如其他人所说,您也可以使用
    std::greater
    而不是您自己的函数。您还可以使用lambda:
    [](int a,int b){返回a> b;} /Cord>可能想详细说明如何使用<代码> STD::绑定< /COD> C++中,STD::绑定返回到STD::AUTHORE。;
    @TheFloatingBrain std::bind通常更好。如果同时使用多个解决方案类,静态函数是危险的。我认为
    std::bind
    通常被
    std::function
    避免/替换了。另外,我不确定从多个实例多次调用
    comp
    是如何产生问题的。可能需要详细说明如何解决问题e>代码> STD::C++中的绑定< /代码>:STD::绑定返回到一个STD::函数:在使用STD之后:代码< > <代码>::绑定<代码>排序(vc.NeX),vc.Enter(),STD::绑定(和解决方案:,COMP,这个,占位符::1,占位符::;
    @TheFloatingBrain std::bind通常更好。如果同时使用多个解决方案类,静态函数是危险的。我认为
    std::bind
    通常被
    std::function
    避免/替换。而且我不确定从多个实例多次调用
    comp
    是如何产生问题的。
    std::function
    b也可能是基于ASD的解决方案?
    std::function
    也可能是基于ASD的解决方案?
    class Solution {
    public:
    
        bool comp(int &a,int &b){
            return a>b;
        }
    
        int findKthLargest(vector<int>& nums, int k) {
            vector<int> vec= nums;
            sort(vec.begin(),vec.end(),comp);  //error: reference to non-static member should be called
    
            cout << vec[k-1];
        }
    };
    
    sort(vec.begin(),vec.end(), [this](int i, int j){return comp(i,j);});
    
    sort(vec.begin(), vec.end(), std::bind(&Solution::comp, this, _1, _2));
    
    sort(vec.begin(), vec.end(), std::greater<int>());
    
     struct {
         bool operator()(int a, int b) const
         {   
             return a > b;
         }   
     } comp;
     .
     .
     sort(vec.begin(), vec.end(), comp);