Один класс на правило заголовка не имеет смысла. Если это не работает:
#include <header1>
#include <header2>
тогда некоторые варианты этого будут:
#include <header1a>
#include <header2>
#include <header1b>
Это может привести к тому, что в заголовке будет меньше одного класса, но вы всегда можете использовать (void *) и приведение и встроенные функции (в этом случае «встроенный» будет, вероятно, должным образом игнорироваться компилятором). Так что вопрос, как мне кажется, можно свести к:
class A
{
// ...
void *pimpl;
}
Возможно ли, что частная реализация, pimpl, зависит от объявления A? Если это так, то pimpl.cpp (как заголовок) должен предшествовать и следовать за A.h. Но так как вы всегда можете снова использовать (void *) и приводить и встроенные функции в предыдущих заголовках, это можно сделать.
Конечно, я могу ошибаться. В любом случае: Ick.