Qubc
@Qubc
Ненавижу полисемию.

Для чего объявляется вложенная структура (или класс) перед тем, как она объявляется дружественной?

#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;
}
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Попробуйте удалить и скомпилировать. Компилятор что говорит?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы