C++ 为什么我应该在结构而不是类中重载优先级队列的()运算符?
我想知道为什么下面的重载是错误的C++ 为什么我应该在结构而不是类中重载优先级队列的()运算符?,c++,operator-overloading,priority-queue,C++,Operator Overloading,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"); my
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;
}
当我使用“struct”而不是“class”时,它就工作了
我想知道为什么下面的重载是错误的
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;
}
因为用class
关键字定义的类的默认访问说明符是私有的。您没有指定成员函数的访问说明符,因此使用默认值
错误消息向您解释无法访问私有成员。只能在类的范围内命名私有函数。由于您使用的模板未在类的范围内定义,因此它不能使用私有成员函数
使用struct
关键字定义的类的默认访问说明符是public。公共函数可以从类定义之外命名,因此它在这里工作
为什么我应该在结构而不是类中重载优先级队列的()运算符
您也可以使用class
。但是,您必须显式地指定访问说明符
另外,默认访问说明符是使用关键字class
定义的类与使用关键字struct
定义的类(也称为structs)之间唯一的区别
我想知道为什么下面的重载是错误的
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;
}
因为用class
关键字定义的类的默认访问说明符是私有的。您没有指定成员函数的访问说明符,因此使用默认值
错误消息向您解释无法访问私有成员。只能在类的范围内命名私有函数。由于您使用的模板未在类的范围内定义,因此它不能使用私有成员函数
使用struct
关键字定义的类的默认访问说明符是public。公共函数可以从类定义之外命名,因此它在这里工作
为什么我应该在结构而不是类中重载优先级队列的()运算符
您也可以使用class
。但是,您必须显式地指定访问说明符
另外,默认访问说明符是使用关键字
class
定义的类与使用关键字struct
定义的类(也称为structs)之间唯一的区别。struct
和class
基本相同,默认情况下,类中只有成员是私有的,默认情况下,在结构中为public。如果添加公共访问修饰符,则使用类将起作用:struct
和class
基本相同,只有成员在类中默认为私有,在结构中默认为公共。如果添加公共访问修饰符,则可以使用类: