为什么我应该在结构而不是类中为priority_queue重载()运算符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我应该在结构而不是类中为priority_queue重载()运算符?相关的知识,希望对你有一定的参考价值。
我想知道为什么以下重载是错误的。
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.
当我使用“结构”而不是“类”时,它起作用。
答案
我想知道为什么以下重载是错误的。
因为用class
关键字定义的类的默认访问说明是私有的。您未指定成员函数的访问说明符,因此使用默认值。
错误消息向您说明无法访问私有成员。私有函数只能在类的范围内命名。由于您使用的模板未在类的范围内定义,因此无法使用私有成员函数。
struct
关键字定义的类的默认访问说明符是public。可以从类定义之外命名公共函数,因此可以在此处使用。
为什么我应该在结构而不是类中重载优先级队列的()运算符?
您也可以使用class
。但是然后您必须显式指定访问说明符。
P.S。默认的访问说明符是用关键字class
定义的类和用关键字struct
定义的类(也称为结构)之间的唯一区别。
以上是关于为什么我应该在结构而不是类中为priority_queue重载()运算符?的主要内容,如果未能解决你的问题,请参考以下文章