Error: "reference to non static member function must be called" not getting resolved when using classes
Error: "reference to non static member function must be called" not getting resolved when using classes
我正在尝试解决一个问题,其中我有一个 n x 2 的二维数组。我想按第二列对数组进行排序。我不想使用手动排序,而是尝试使用 STL。
我的问题:我收到错误:“必须调用对非静态成员函数的引用”
我尝试在 class 之外声明函数和结构,但后来我遇到了不同的错误集。我试图实施已经存在的解决方案,但我无法得出想要的解决方案。
下面是我的代码:
class Solution {
public:
struct Interval
{
int column1, column2;
};
bool sortcol(Interval i1, Interval i2)
{
return (i1.column2 < i2.column2);
}
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<vector<int> > count( mat.size() , vector<int> (2, 0));
for( int i = 0 ; i < mat.size() ; i++ )
{
for( int j = 0 ; j < mat[i].size() ; j++ )
{
if(mat[i][j])
{
count[i][1]++;
}
}
count[i][0] = i;
}
sort(count.begin(), count.end(), sortcol);
vector<int> arr;
for( int i = 0 ; i < mat.size() ; i++ )
{
arr.push_back( count[i][0]);
}
return arr;
}
};
非常感谢您调查我的问题。
您的排序算法需要“函数对象”(具有 operator()
或函数指针的对象实例),它接受对 2 个比较向量和 returns 布尔值的引用,例如:
// function out of class scope
bool compVectorBySecondElt(const vector<int>& first, const vector<int>& second) {
return first[1] < second[1]; // hope the index 1 is valid
}
如上回复所述,您的比较器可以是“自由函数、静态成员函数或 lambda”。它也可以是 class 的对象,例如:
struct MyVectorCmp {
bool operator()(const vector<int>& first, const vector<int>& second) {
return first[1] < second[1]; // hope the index 1 is valid
}
};
所有这些情况的共同点是能够使用 2 个参数调用您的功能对象并接受 bool 值作为结果。
在您的示例中,您接受了错误,因为 class 的任何 非静态方法都不是常规函数 ,除了明确指定的参数外,它还可以被视为具有额外的隐式 this
参数,指向当前对象。
我正在尝试解决一个问题,其中我有一个 n x 2 的二维数组。我想按第二列对数组进行排序。我不想使用手动排序,而是尝试使用 STL。
我的问题:我收到错误:“必须调用对非静态成员函数的引用”
我尝试在 class 之外声明函数和结构,但后来我遇到了不同的错误集。我试图实施已经存在的解决方案,但我无法得出想要的解决方案。
下面是我的代码:
class Solution {
public:
struct Interval
{
int column1, column2;
};
bool sortcol(Interval i1, Interval i2)
{
return (i1.column2 < i2.column2);
}
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
vector<vector<int> > count( mat.size() , vector<int> (2, 0));
for( int i = 0 ; i < mat.size() ; i++ )
{
for( int j = 0 ; j < mat[i].size() ; j++ )
{
if(mat[i][j])
{
count[i][1]++;
}
}
count[i][0] = i;
}
sort(count.begin(), count.end(), sortcol);
vector<int> arr;
for( int i = 0 ; i < mat.size() ; i++ )
{
arr.push_back( count[i][0]);
}
return arr;
}
};
非常感谢您调查我的问题。
您的排序算法需要“函数对象”(具有 operator()
或函数指针的对象实例),它接受对 2 个比较向量和 returns 布尔值的引用,例如:
// function out of class scope
bool compVectorBySecondElt(const vector<int>& first, const vector<int>& second) {
return first[1] < second[1]; // hope the index 1 is valid
}
如上回复所述,您的比较器可以是“自由函数、静态成员函数或 lambda”。它也可以是 class 的对象,例如:
struct MyVectorCmp {
bool operator()(const vector<int>& first, const vector<int>& second) {
return first[1] < second[1]; // hope the index 1 is valid
}
};
所有这些情况的共同点是能够使用 2 个参数调用您的功能对象并接受 bool 值作为结果。
在您的示例中,您接受了错误,因为 class 的任何 非静态方法都不是常规函数 ,除了明确指定的参数外,它还可以被视为具有额外的隐式 this
参数,指向当前对象。