Лучший ответ: не создавайте свой код таким образом! Это вводит " циклическую зависимость ", которая немедленно делает ваш код хрупким. Кроме того, способ, которым вы написали свой пример, описывает двойную рекурсивную функцию (A вызывает B, которая вызывает A), и, поскольку нет завершающего условия, оно не ограничено! Как видите, это может привести к очень неуправляемым обстоятельствам.
Давайте на время отказаться от хороших инженерных практик. То, как вы описали заголовки и исходные файлы, является адекватным и может быть построено с помощью следующей команды:
g++ file1.cc file2.cc -o libCoupledRecursiveExample.so
Здесь все становится сложнее: только с помощью инструкций по сборке вы не можете обнаружить зависимость! Хорошие средства проверки статического кода могут обнаружить эти обстоятельства и предупредить вас, но когда вы используете ленивый компилятор (например, g++
без флагов), легко подобрать код, подобный этому, который не будет генерировать никаких предупреждений.