嵌套类显示成员值
Nested class display member value
class A
{
public:
class B
{
private:
int ii;
};
void print(){cout<<B::ii<<endl;}
};
我的编译器说我不能访问ii中的整数;我搜索了这个网站,并提出了朋友的关键我把它改成
class A
{
public:
class B
{
private:
int ii;
};
friend void print(){cout<<B::ii<<endl;}
};
但它也不起作用。你能帮我吗?我被卡住了。真的真的真的伤心如无路可走!
A
包含B
。但这并不意味着A
可以访问B
的私处。只有当B
和A
成为朋友时,它才能这样做。
class A
{
public:
class B
{
private:
int ii;
friend class A;
};
void print(){cout<<B::ii<<endl;}
};
同时,ii
是B
的非静态成员。你不能用B::
语法访问它;您需要一个类型为B
的实例。
类A对类B的成员没有特殊的访问权限,必须尊重类ii的私有属性。您可以通过为类B创建set/get函数或将A设置为B的友类来访问ii。您还需要一个B类型的实际对象。
class A
{
public:
class B
{
private:
int ii;
friend class A;
};
B m_B;
void print(){cout<<m_B.ii<<endl;}
};
标准文本对此非常清楚:
c++标准(2003)在$11.8/1 [class.access.nest]中说,
嵌套类的成员对类的成员没有特殊访问权限类,也不能赋值给已赋值的类或函数友谊是一个封闭的阶级;通常的存取规则(第11条)都要遵守。封闭类的成员没有特殊的对嵌套类成员的访问;通常的访问规则(子句)
现在,关于你问题中的第二种情况,print()
函数是A
的朋友,也就是说,它只能访问A
的私有成员,而不能访问B
的私有成员,因为print()
函数不是B
的朋友。把print()
变成A
的朋友并不会自动把它变成B
的friend
。
查看此缺陷报告:
- 45岁。访问嵌套类
有点相关的话题:
- 内部类在c++中自动是友类吗?
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C/C++intellisense 0.26.1不显示结构成员列表
- gdb映射显示不正确的成员变量
- 显示结构C++成员的相同值
- 如何在 Visual Studio 中显示模板的静态类成员
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 我如何调用我的3个数据成员中每个人的设置方法,然后显示由我的设置方法设置的值
- 如果不是成员,则不显示 QLabel
- C++/SFML显示小精灵成员被鼠标点击更改的小故障
- Doxygen 不显示如何从其他类调用记录的成员函数(包括构造函数)
- C++ 编译失败,并显示错误:命名空间中没有名为 'snprintf' 的成员'std'
- 在LLDB类型摘要中显示C++类成员
- 在c++中调用数组的成员以显示到控制台
- 在DDD中隐藏静态数据成员,或者只显示某些成员
- 嵌套类显示成员值
- 为什么Visual Studio的智能感知显示私有成员和功能?
- 类数据成员内存布局显示指针大小过大
- 如何显示存储在 Multimap 中的类数据成员