Подскажите как объявить, и в последующем обратиться к функции в другом файле
Ответ
Во-первых, в .h-файлах нет никаких функций. Это просто кусок текста, вставляемый перед компиляцией вместо соответствующих директив #include. Соответственно, с точки зрения компилятора нет никакой разницы, включили ли вы заголовочный файл или просто взяли и скопировали его содержимое в свой .cpp руками.
То есть для решения вашей задачи нет разницы между заголовочным файлом с объявлением функции:
decl.h
#pragma once
void foo(int bar);
main.cpp
#include "decl.h"
int main()
{
foo(21); // Использование функции
}
implementation.cpp
#include "decl.h"
void foo(int bar)
{
// Реализация функции
}
и повтором объявления в каждом .cpp-файле, которому нужна эта функция:
main.cpp
void foo(int bar);
int main()
{
foo(21); // Использование функции
}
implementation.cpp
void foo(int bar)
{
// Реализация функции
}
Во-вторых, .cpp-файл — это «вещь в себе», чёрный ящик с двоичными данными и списком того, что этот ящик импортирует/экспортирует, и по каким байтовым смещениям в вышеуказанных данных это требуется/реализуется соответственно:
Если в .cpp-файле производится обращение к чему-то, нереализованному в этом файле, и у компилятора есть объявление (то есть прототип для проверки корректности обращения), генерируется импорт этого чего-то по имени.
Если в .cpp-файле объявляется не-static переменная либо функция (методы классов, кстати, тоже полноценные функции), генерируется экспорт.
И только потом, на этапе компоновки производится связывание соответствующих импортов и экспортов этих «чёрных ящиков» (а также подобных «ящиков», составляющих реализацию стандартной библиотеки).
Комментариев нет:
Отправить комментарий