В вашей идее о функции объявление и определение .
, кажется, есть некоторая путаница
Объявление функции является прототипом функции.
Например:
void doSomething();
Хотя определение является телом функции.
Например:
void doSomething()
{
}
Обычно объявление отправляется в заголовочный файл, а определение в файл cpp.
Компилятор использует объявление для сопоставления параметров вызываемой функции, в то время как компоновщик связывает определение с вызываемой функцией.
Компиляция - это процесс, в котором исходные файлы компилируются в объектные файлы.
Во время компоновки все объектные файлы используются компоновщиком для создания исполняемого файла. компоновщик имеет доступ к различным объектным файлам и, следовательно, к определению функции, определенной в другом файле. Пока имя функции уникально, компоновщик с радостью будет ссылаться на это конкретное определение, в случае, если компоновщик найдет более двух совпадений, то ваша программа прервется Одно правило определения и будет сообщать о множественных ошибках определения.
Также обратите внимание, что компоновщик должен использовать (связывать) определение функции только в том случае, если функция вызывается, если ваша программа просто объявляет функцию, не предоставляет определения и никогда не использует (вызывает) функцию, которая там не будет быть какие-либо ошибки.