This question already has answers here:
C++ Visual Studio “Non-standard syntax; use '&' to create a pointer to member” [closed]
(2个答案)
去年关闭。
如果我将sfun()定义为类中的成员函数,则会收到编译错误消息:“非标准语法;使用'&'创建指向成员的指针”在“ sort(intervals.begin()”行中,interval.end(),sfun);“
但是,如果我把它放在课外,那就很好。为什么?
当您将
您还可以将
(2个答案)
去年关闭。
如果我将sfun()定义为类中的成员函数,则会收到编译错误消息:“非标准语法;使用'&'创建指向成员的指针”在“ sort(intervals.begin()”行中,interval.end(),sfun);“
但是,如果我把它放在课外,那就很好。为什么?
struct Interval {
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
class Solution {
bool sfun(const Interval &a, const Interval &b) {
return a.start < b.start;
}
public:
vector<Interval> merge(vector<Interval>& intervals) {
sort(intervals.begin(), intervals.end(), sfun);
....
}
};
最佳答案
class Solution {
bool sfun(const Interval &a, const Interval &b) {
return a.start < b.start;
}
sfun
是成员函数。您可以访问其中的隐式this
指针。因此,您可以使用签名bool sfun(Solution* this, const Interval& a, const Interval& b)
大致将其视为一个函数。当您将
sfun
放在类之外时,它可以工作,因为它不是成员函数,而是常规的自由函数。它的签名将是bool sfun(const Interval &a, const Interval &b)
您还可以将
sfun
设为static
函数:class Solution {
static bool sfun(const Interval &a, const Interval &b) {
return a.start < b.start;
}
static
成员函数是“类函数”。它们不适用于类的实例。没有隐式的this
指针。这只是一个常规功能。