C ++: возможно ли позднее инициализировать функцию-член класса? - PullRequest
0 голосов
/ 09 января 2020

У меня есть следующий код:

#include <iostream>

class First {
    public:
        Second* x;
        void make_value(Second* sec_);
        First() {
            // Initialization
        }
};

class Second {
    public:
        First* y;
        Second() {
            // Initialization
        }
};

void First::make_value(Second* sec_) {
    x = sec_;
}

void main() {
    fir = new First();
    sec = new Second();
    fir->make_value(sec);
}

Каждый из двух классов имеет переменную-член другого класса, которая по понятным причинам не работает.

Мой вопрос заключается в том, существует ли способ поздней инициализации переменной x после инициализации класса Second. Если нет, то какие есть альтернативы?

1 Ответ

5 голосов
/ 09 января 2020

Для любого использования, где компилятору не нужно определение класса, будет достаточно предварительного объявления. Указатели и ссылки на типы не требуют определения.

class Second; // forward declare

class First {
    public:
        Second* x;
        void make_value(Second* sec_);
        First() {
            // Initialization
        }
};

class Second {
    public:
        First* y;
        Second() {
            // Initialization
        }
};

void First::make_value(Second* sec_) {
    x = sec_;
}
...