一个友元类使用误区(C++)

这个问题,我困扰了好一会,决定记录一下。

一、问题引出以及分析

问题代码简化如下:

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中使用类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值