【发布时间】:2018-11-23 01:39:07
【问题描述】:
我正在尝试弄清楚如何使内部类型的 private/protected 成员对其封闭类可访问。
我的搜索让我遇到了很多关于如何从内部类 (e.g.) 访问 封闭成员 的问题,但这不是我需要的。其他很多帖子都遍历Java,这绝对不是我需要的。这是 C++。
考虑一下这个 MCVE:
#include <iostream>
struct bla
{
bla( );
~bla( );
class inner;
inner *_inner;
};
class bla::inner
{
public:
inner( )
: field( 13 )
{}
private:
friend struct bla;
unsigned field;
};
bla::bla( )
: _inner( new inner )
{}
bla::~bla( )
{
delete _inner;
}
int main( )
{
bla _bla;
_bla._inner->field = 42;
std::cout << "bla::_inner->field: " << _bla._inner->field << std::endl;
}
我能找到的唯一问题是C++ Outer class access Inner class's private - why forbidden,但建议的解决方案对我不起作用:
$ g++ -std=c++14 -Wall inner_class.cpp -o inner_class
inner_class.cpp: In function ‘int main()’:
inner_class.cpp:23:11: error: ‘unsigned int bla::inner::field’ is private
unsigned field;
^
inner_class.cpp:39:15: error: within this context
_bla._inner->field = 42;
^
inner_class.cpp:23:11: error: ‘unsigned int bla::inner::field’ is private
unsigned field;
^
inner_class.cpp:40:54: error: within this context
std::cout << "bla::_inner->field: " << _bla._inner->field << std::endl;
如何正确授予bla 访问field 的权限?我错过了任何愚蠢的细节吗?
提前致谢。
【问题讨论】:
-
你不能。无论如何,不在
main的上下文中。main无法访问私有或受保护的字段,这是没有办法的。 -
"但建议的解决方案对我不起作用:" 这将表明这是一个 XY 问题。我建议您倒回一两个思考过程,然后说出您要解决的问题是什么。
-
@SombreroChicken 我认为你成功了。我刚刚修改了我的代码,发现我必须在“bla”中为我的“字段”提供访问器。请发布答案,以便我接受。
-
@SombreroChicken " main 无法访问私有或受保护的字段,没有办法解决这个问题" - 是的:
friend int main();(我不是说你应该这样做,只是你可以)
标签: c++ c++14 inner-classes friend