💩 Если вы определите функцию с одинаковым именем и параметрами в двух разных файлах, это нарушит One Definition Rule. Это правило гласит, что в пределах одной программы не может быть более одного определения любой переменной, функции или класса.
💩 Ошибка обычно возникает на этапе компоновки, когда компоновщик обнаруживает, что два объектных файла содержат определения для одной и той же функции. Компоновщик выдаст ошибку множественного определения и откажется создавать исполняемый файл.
💩 Один из способов решения этой проблемы - использование пространств имен. Вы можете поместить каждую функцию в свое собственное пространство имен, чтобы избежать конфликта имен. Например:
// fileA.cpp
namespace FileA {
void foo(int a) {
// Some code for file A
}
}
// fileB.cpp
namespace FileB {
void foo(int a) {
// Some code for file B
}
}
💩 Теперь вы можете использовать обе функции в своей программе, указывая пространство имен перед именем функции:
FileA::foo(1); и FileB::foo(2);.