Если A и B взаимозависимы, вы не можете развернуть ни один из них изолированно.Поэтому у вас практически один модуль, а не два.(Вы можете реорганизовать ваши модули, чтобы извлечь общий материал в третий модуль C, тем самым сделав так, что A и B зависят от C, но не друг от друга.)
Хорошо спроектированный проект не должен содержать циклических зависимостей модулей,Это гарантирует, что между модулями всегда существует нормальный порядок сборки.
Обновление
как разделить модуль на несколько файлов .h и .cpp (не один)?
Основной принцип очень похож на принцип модуля: избегайте циклических зависимостей и повторяющихся определений.@Felix уже упомянул основные инструменты для этого: отправьте декларации и включите охрану.Я также могу поддержать рекомендацию @ kotlinski о книге Лармана для более глубокого понимания темы.
Изучение хорошего дизайна требует практики, поэтому не сдавайтесь, если ваш первый подход не выглядит идеально :-) ВC ++, одна конкретная боль - чрезмерная перекомпиляция после изменений.Чтобы свести к минимуму это, старайтесь, чтобы вещи (классы, заголовки), от которых вы зависели больше всего, были теми, которые меняются реже.Т.е. зависят от интерфейсов (абстрактных классов), а не от конкретных реализаций.
Кроме того, старайтесь поддерживать здоровые отношения между логическим разделением (классы / компоненты) и физическим разделением (файлы header / cpp).Типичный способ - поместить каждое определение класса в отдельный заголовочный файл, а его реализацию (если применимо) - в отдельный файл cpp.Однако вы можете предпочесть определение тесно связанных классов (компонентов) в одном заголовке, чтобы подчеркнуть их логическую взаимосвязь.