这个问题,我困扰了好一会,决定记录一下。
一、问题引出以及分析
问题代码简化如下:
class B;
class A
{
friend class B;
private:
A() = default;
bool operator()(int lhs,int rhs){ return lhs<rhs; }
};
class B
{
//...working
add_item(int times){ pq.push(times); }
private:
std::priority_queue<int,std::vector<int> ,A> pq;
};
编译出错提示信息:
'bool A::operator()(int, int)' is private
你知道问题出现在哪里吗??如果你看出来了,那么恭喜你,我是花了挺长时间纠结的。
我的理解是这样的。 类A有一个删除的默认构造函数,类的用户是没有权限新建实例的,主要是为了封装数据。我一开始以为,B是A的友元类,理论上在B的作用域中可以建立A的对象,访问A的私有接口。 这样想确实没有错误,问题出现在我是在类B的成员std::priority_queue中使用类