【问题标题】:reference to non static member must be called [duplicate]必须调用对非静态成员的引用[重复]
【发布时间】:2020-08-08 06:19:58
【问题描述】:

有没有办法在这样声明的类的作用域下在这里声明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 {{}};
    }
};

此代码 sn-p 给出错误:

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

【问题讨论】:

  • reference to non static member 按照提示设置为static bool comp(...。无论如何,它没有使用任何实例数据或方法,这正是static 对类成员的含义。
  • 你会制作一个Solution 对象吗?如果没有,那么也许使用namespace 而不是class 可能会有所帮助。
  • @dxiv 我很惊讶地看到这行得通,我记得这样做但失败了。谢谢
  • 没有。要么你没有这样做,要么它没有失败。我们在这里不使用 SOLVED。

标签: c++ class oop


【解决方案1】:

编译器会说非静态成员引用必须与特定对象相关。此提示指出,如果成员未声明为 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(...);

【讨论】:

  • 您不能将(非静态)成员函数传递给std::sort,因此第二种解决方案不适用于 OP 的用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2021-05-30
相关资源
最近更新 更多