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
,因为它是一个成员函数,所以您需要一个实例来调用它
你有一些解决办法
正如其他人已经指出的那样,在
comp
中使用引用并确保在findktlargest
函数中您实际返回了一些内容是没有意义的。问题在于您正在将成员函数传递给std::sort
,因为它是一个成员函数,所以您需要一个实例来调用它
你有一些解决办法
正如其他人已经指出的,在<代码> COMP>代码中没有使用引用的意义,并且在您的<代码> FikkthStimult函数中确实返回了一些东西。在C++中,< P>,排序函数需要一个静态函数返回<代码> Boo.<代码>,但是<代码> COMP是
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
astatic
成员函数?仅供参考,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);