A と B が相互に依存している場合、それらを個別に展開することはできません。したがって、実際には 2 つではなく 1 つのモジュールを使用します。(ただし、モジュールをリファクタリングして、共通のものを 3 番目のモジュール C に抽出することができます。したがって、A と B の両方が C に依存するが、互いに依存することはありません。)
適切に設計されたプロジェクトには、周期的なモジュールの依存関係が含まれていません。これにより、モジュール間に常に適切なビルド順序が存在することが保証されます。
アップデート
モジュールを多くの .h および .cpp ファイル (単一のファイルではなく) に分割するにはどうすればよいですか?
基本的な原則は、モジュール レベルの原則と非常によく似ています。循環的な依存関係と重複した定義を避けることです。@Felixは、これに不可欠なツールである前方宣言とインクルードガードについてすでに言及しました。また、トピックをより深く理解するために、@kotlinski が推奨する Larman の本を 2 番目に使用することもできます。
優れた設計を学ぶには練習が必要です。最初のアプローチが完璧に見えなくてもあきらめないでください :-) C++ では、変更後の過剰な再コンパイルが特に苦痛です。これを最小限に抑えるには、最も依存するもの (クラス、ヘッダー) が変更される頻度が最も低いものになるように努めてください。つまり、具体的な実装ではなく、インターフェイス (抽象クラス) に依存します。
また、論理パーティション (クラス/コンポーネント) と物理パーティション (ヘッダー/cpp ファイル) の間の健全な関係を維持するように努めてください。一般的な方法は、すべてのクラス定義を個別のヘッダー ファイルに配置し、その実装 (該当する場合) を個別の cpp ファイルに配置することです。ただし、論理的な関係を強調するために、1 つのヘッダーで密結合クラス (コンポーネント) を定義することをお勧めします。