Чтобы инициализирвать переменную такого типа, надо передать ей набор значений для всех ее полей. Для инициализации указателей, нужно выделить память (в куче с помощью
new
). Собственно вся инициализация происходит внутри функции
T create_t_1()
, укороченный альтернативный вариант в
T create_t_2()
.
#include <iostream>
struct T {
struct _T_ {
int* a;
}* p1;
float* a;
int* b;
struct _T {
int a;
int b;
double c;
}* p2;
int c;
};
T create_t_1() {
int* _t_a = new int {76};
T::_T_* p1 = new T::_T_ {_t_a};
float* a = new float {85.012};
int* b = new int {100};
T::_T* p2 = new T::_T {122, 152, 203.013};
int c = 250;
T ans {p1, a, b, p2, c};
return ans;
}
T create_t_2() {
T ans {
new T::_T_ {new int {76}},
new float {85.012},
new int {100},
new T::_T {122, 152, 203.013},
250};
return ans;
}
void print_t(const T& t) {
std::cout << "&.p1.a = " << t.p1->a << "\n"
<< "&.a = " << t.a << "\n"
<< "&.b = " << t.b << "\n"
<< std::endl;
std::cout << ".p1.a = " << *t.p1->a << "\n"
<< ".a = " << *t.a << "\n"
<< ".b = " << *t.b << "\n"
<< ".p2.a = " << t.p2->a << "\n"
<< ".p2.b = " << t.p2->b << "\n"
<< ".p2.c = " << t.p2->c << "\n"
<< ".c = " << t.c << "\n"
<< std::endl;
}
int main() {
T value_1 = create_t_1();
print_t(value_1);
T value_2 = create_t_1();
print_t(value_2);
return 0;
}