我想知道为什么以下重载是错误的。
class comparator{
bool operator()(string& s1, string& s2) {
return s1[0] < s2[0];
}
};
int main()
{
priority_queue<string, vector<string>, comparator> myqueue;
myqueue.push("a");
myqueue.push("bb");
myqueue.push("ccc");
return 0;
}
它给出了错误
operator() cannot access private member declared in class comparator.
当我使用“ struct”而不是“ class”时,它会起作用。
答案 0 :(得分:2)
我想知道为什么以下重载是错误的。
因为用class
关键字定义的类的默认访问说明符是private。您没有指定成员函数的访问说明符,因此使用默认值。
该错误消息向您说明无法访问私有成员。私有函数只能在类的范围内命名。由于您使用的模板未在类的范围内定义,因此无法使用私有成员函数。
用struct
关键字定义的类的默认访问说明符是public。可以从类定义之外命名公共函数,因此可以在这里使用。
为什么我应该在结构而不是类中为(priority_queue)重载()运算符?
您也可以使用class
。但是随后您必须明确指定访问说明符。
P.S。默认的访问说明符是用关键字class
定义的类和用关键字struct
定义的类(也称为结构)之间的唯一区别。