我该如何解决这些错误:必须调用对非静态成员函数的引用以及在静态成员函数中对成员 '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 成员变量。