Вложенные структуры

Позвольте задать еще такой вопрос по структурам:

Пытаюсь создать структуру в котором было бы три подструктуры, но 3-я структура опредлена с отдельно .h файле.

Подобная попытка приводит к ошибке:

Ошибка C2079 "my_struct_3::my_struct_2_" использует не имеющую определения структуру struct "my_struct_2"

//Struct_3.h

#include "Struct_result.h" 

struct my_struct_2;


struct my_struct_3
{
    my_struct_2 my_struct_2_;
};

//Struct_result.h

#include "Struct_3.h" 

struct my_result;
struct my_struct_3;


struct my_struct_1
{
    int my_int;
};


struct my_struct_2
{
    char my_char;
};



struct my_result
{
    my_struct_1 my_struct_1_;
    my_struct_2 my_struct_2_;
    my_struct_3 my_struct_3_;
};

//main.cpp

#include "Struct_result.h" 
#include "Struct_3.h" 


int main()
{

}

Не понимаю, как правильно в итоге можно вложить все структуры в одну из разных .h файлов ?


Ответы (1 шт):

Автор решения: Mikhailo

Смотрите: у вса структура 1 не зависит ни от чего - выносим ее в отдельный h. Структура 2 - тоже, ее тоже даем в отдельном h (или вместе со структурой 1).

Структура 3 зависит от структуры 2 - ее помещаем в свой файл с включением в него h2.

Результирующая зависит от всего - значит, она последняя в своем файле. Итого:

struct1.h

#pragma once

struct my_struct_1
{
    int my_int;
};

struct2.h

#pragma once

struct my_struct_2
{
    char my_char;
};

struct3.h

#pragma once
#include "struct2.h"

struct my_struct_3
{
    my_struct_2 my_struct_2_;
};

struct_res.h

#pragma once
#include "struct1.h"
#include "struct2.h"
#include "struct3.h"

struct my_result
{
    my_struct_1 my_struct_1_;
    my_struct_2 my_struct_2_;
    my_struct_3 my_struct_3_;
};

struct.cpp

#include "struct_res.h"

int main() {}

Но можно и прощзе: собрать всё в один

struct_res.h

#pragma once

struct my_struct_1
{
    int my_int;
};

struct my_struct_2
{
    char my_char;
};

struct my_struct_3
{
    my_struct_2 my_struct_2_;
};

struct my_result
{
    my_struct_1 my_struct_1_;
    my_struct_2 my_struct_2_;
    my_struct_3 my_struct_3_;
};

Главное - отсортировать объявления топологически.

→ Ссылка