Я пытаюсь выяснить, как сделать член private/protected
внутреннего типа доступным для включающего его класса.
Мой поиск привел меня ко многим вопросам о том, как получить доступ к включающему члену . из внутреннего класса ( например ), но это не то, что мне нужно.Многие другие сообщения пересекают 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 ++ Доступ к внешнему классу Закрытый внутренний класс - почему запрещено , но предложенное решение не работает для меня:
$ 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
?Я пропустил какую-нибудь глупую деталь?
Заранее спасибо.