#include <iostream>
struct Holder {
private:
int a;
public:
struct Pointer; // Для чего?
/*
Структура, объявленная как вложенная, не получает автоматического доступа
к закрытым членам внешней структуры. Для таких случаев существует конкретная
процедура: сначала объявляется (без определения) вложенная структура, затем она
объявляется дружественной и только после этого определяется.
*/
friend struct Pointer;
/* Определение структуры должно быть отделено от объявления friend,
в противном случае компилятор не воспримет ее как вложенную.
ок
*/
struct Pointer {
private:
;
public:
void f( Holder* ptr );
};
};
void Holder::Pointer::f ( Holder* ptr ){
std::cout << ptr->a << std::endl;
}
int main(void){
Holder h;
Holder::Pointer p;
p.f(&h);
return 0;
}