Включите то, что необходимо для синтаксического анализа заголовочного файла, не полагаясь на внешний порядок включения (другими словами: сделайте ваши заголовки самодостаточными).
В вашем случае, если c.h
объявляет class C
который наследуется от class B
, очевидно, вы должны включить B.h
.Однако, если class A
никогда не появится в c.h
, я полагаю, что нет причин для его включения.Тот факт, что b.h
упоминает A
, означает, что b.h
должен сделать то, что необходимо для анализа, либо путем объявления вперед A
, либо с учетом a.h
.
Так что, с моей точки зрения, вывы делаете то, что должно быть сделано.
Также обратите внимание, что если по некоторым причинам c.h
начнет упоминать A
, я бы добавил соответствующее объявление include или forward, чтобы не зависеть от того факта, что b.h
делает это для меня.