我该如何解决这些错误:必须调用对非静态成员函数的引用以及在静态成员函数中对成员 'mat' 的无效使用?
How do i fix these errors : reference to non-static member function must be called and invalid use of member 'mat' in static member function?
我正在编写一个必须使用自定义排序的程序,所以我制作了一个自定义比较器“comp”,但在 C++ class 中使用它会给出“对非-必须调用静态成员函数 ”,我使用 static bool comp() 解决了这个问题。但是在使我的比较器函数成为静态之后,我得到了错误“在静态成员函数中无效使用成员'mat'”。我该如何度过这些难关?
我调用了 sort(str.begin(), str.end(), comp()),并从 "comp “,我调用了 “comp_()”。我不得不以不同的方式对字符串进行排序。
class Solution {
public:
int mat[26][26];
static bool comp_(char a, char b, int i) {
if (i == 26) {
return a<b;
}
if (mat[a-'A'][i] > mat[b-'A'][i]) {
return true;
}
else if (mat[a-'A'][i] < mat[b-'A'][i]) {
return false;
}
return comp_(a,b,i+1);
}
static bool comp(char a, char b) {
return comp_(a,b,0);
}
诀窍是在 Solution
class 上定义一个 call-operator,这样它就可以用作传递给 std::sort()
调用的 Comparator 对象,像这样:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int mat[26][26];
bool comp(char a, char b, int i) const {
if (i == 26) {
return a<b;
}
if (mat[a-'A'][i] > mat[b-'A'][i]) {
return true;
}
else if (mat[a-'A'][i] < mat[b-'A'][i]) {
return false;
}
return comp(a,b,i+1);
}
bool operator()(const char & a, const char & b) const
{
return comp(a, b, 0);
}
};
int main(int argc, char ** argv)
{
std::vector<char> str;
str.push_back('d');
str.push_back('c');
str.push_back('b');
str.push_back('a');
Solution sol;
std::sort(str.begin(), str.end(), sol);
for (size_t i=0; i<str.size(); i++) std::cout << str[i] << std::endl;
return 0;
}
这样,您的 Solution
对象中的方法就不必是静态的,因此它们可以访问 mat
成员变量。
我正在编写一个必须使用自定义排序的程序,所以我制作了一个自定义比较器“comp”,但在 C++ class 中使用它会给出“对非-必须调用静态成员函数 ”,我使用 static bool comp() 解决了这个问题。但是在使我的比较器函数成为静态之后,我得到了错误“在静态成员函数中无效使用成员'mat'”。我该如何度过这些难关?
我调用了 sort(str.begin(), str.end(), comp()),并从 "comp “,我调用了 “comp_()”。我不得不以不同的方式对字符串进行排序。
class Solution {
public:
int mat[26][26];
static bool comp_(char a, char b, int i) {
if (i == 26) {
return a<b;
}
if (mat[a-'A'][i] > mat[b-'A'][i]) {
return true;
}
else if (mat[a-'A'][i] < mat[b-'A'][i]) {
return false;
}
return comp_(a,b,i+1);
}
static bool comp(char a, char b) {
return comp_(a,b,0);
}
诀窍是在 Solution
class 上定义一个 call-operator,这样它就可以用作传递给 std::sort()
调用的 Comparator 对象,像这样:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int mat[26][26];
bool comp(char a, char b, int i) const {
if (i == 26) {
return a<b;
}
if (mat[a-'A'][i] > mat[b-'A'][i]) {
return true;
}
else if (mat[a-'A'][i] < mat[b-'A'][i]) {
return false;
}
return comp(a,b,i+1);
}
bool operator()(const char & a, const char & b) const
{
return comp(a, b, 0);
}
};
int main(int argc, char ** argv)
{
std::vector<char> str;
str.push_back('d');
str.push_back('c');
str.push_back('b');
str.push_back('a');
Solution sol;
std::sort(str.begin(), str.end(), sol);
for (size_t i=0; i<str.size(); i++) std::cout << str[i] << std::endl;
return 0;
}
这样,您的 Solution
对象中的方法就不必是静态的,因此它们可以访问 mat
成员变量。