Q
Q
Qubc2021-07-03 20:44:52
C++ / C#
Qubc, 2021-07-03 20:44:52

Why is a nested structure (or class) declared before it is declared a friend?

#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;
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
W
Wataru, 2021-07-03
@Qubc

Try to remove and compile. What does the compiler say?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question