首页 > 解决方案 > 必须调用对非静态成员的引用

问题描述

有没有办法在这样声明的类的范围内声明comp函数。

class Solution {
public:
    
    bool comp(vector<int> x, vector<int> y){
        return x[0] < y[0];
    }
    
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end(),comp);
        return {{}};
    }
};

此代码段给出错误:

必须调用对非静态成员的引用

标签: c++classoop

解决方案


编译器会说非静态成员引用必须相对于特定对象。此提示指出,如果成员未声明为 ,则必须在访问类成员之前创建一个对象static

这里有两个选项:

  1. 要么将类成员函数声明为static,然后直接访问。

  2. OTOH,创建类的对象(实例),然后访问类成员函数。


第一个解决方案看起来像:

class Solution {
public:
    // Declared as 'static', so you don't need to create any instances
    static bool comp(vector<int> x, vector<int> y) {
        // ...
    }
};
// ...
Solution::comp(...);

第二种解决方案是(也许你不想要这个):

class Solution {
public:
    bool comp(...) {
        // ...
    }
};
// ...
Solution s;
s.comp(...);

推荐阅读