CWC_21 2022-05-24 22:43 采纳率: 0%
浏览 26

使用类模板前后,类内私有成员访问权限为何改变?

请看以下代码:
类A类B不使用类模板


#include <bits/stdc++.h>
using namespace std;

class A{
    private:
        int a1;
};
class B{
    private:
        A *a2;
};
void copy(const B &b1)
{
    A *a3=b1.a2;
}
int main(void) {
    
    return 0;
}

编译失败,提示:[Error] 'A* B::a2' is private

类A类B使用类模板

#include <bits/stdc++.h>
using namespace std;

template <class T>
class A{
    private:
        T a1;
};

template <class T>
class B{
    private:
        A<T> *a2;
};

template <class T>
void copy(const B<T> &b1)
{
    A<T> *a3=b1.a2;
}
int main(void) {
    
    return 0;
}

编译正常,可执行。

为什么类B的私有成员访问权限改变了?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2022-05-25 08:14
    关注

    因为那个是模板类,并不是具体的类型,跟具体类型实例化后就会报错

    评论

报告相同问题?

问题事件

  • 创建了问题 5月24日

悬赏问题

  • ¥15 网络分析设施点无法识别
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决
  • ¥100 基于SVM的信息粒化时序回归预测,有偿求解!
  • ¥15 物体组批优化问题-数学建模求解答
  • ¥15 微信原生小程序tabBar编译报错
  • ¥350 麦克风声源定位坐标不准
  • ¥15 apifox与swagger使用
  • ¥15 egg异步请求返回404的问题