Если у вас есть FooHeader.h:
Код: Выделить всё
#pragma once
#include "BarHeader.h"
struct Foo { Bar bar;};
Код: Выделить всё
#pragma once
#include "FooHeader.h"
struct Bar { Foo foo; };
Скажем, у вас есть main.cpp, который:
Код: Выделить всё
#include "BarHeader.h"
int main() { }
Код: Выделить всё
|remove|
#include "BarHeader.h"
|add|
#include "FooHeader.h"
struct Bar { Foo foo; };
int main() {}
Код: Выделить всё
|remove|
#include "FooHeader.h"
|add|
#include "BarHeader.h"
struct Foo { Bar bar;}
struct Bar { Foo foo; }
int main() {}
Код: Выделить всё
#include "BarHeader.h"
struct Foo { Bar bar;}
struct Bar { Foo foo; }
int main() {}
Код: Выделить всё
struct Foo { Bar bar;}
struct Bar { Foo foo; }
int main() {}
Разве это не было бы решено, если бы препроцессор просто переместил уже включенный заголовок в точку самого высокого/первого появления в файле? Что-то вроде: «Я вижу, что уже включил вас, но вы были включены сюда, поэтому я перенесу это сюда, и тогда все будет в порядке»? Это решило бы проблему, верно?
Подробнее здесь: https://stackoverflow.com/questions/791 ... each-other
Мобильная версия