Почему важно подключать модуль к проекту

При работе в С++ Builder (да и не только в нем) иногда мы неправильно подключаем модуль к проекту. Если вы хотите использовать класс реализованный в другом модуле, то вы прописываете директиву #include. Это легко, быстро и понятно. Но этого недостаточно.

Проблема появится при первой же попытке запустить проект:

[Linker Error] Unresolved external …

Из текста ошибки видно, что компоновщик не смог найти реализацию методов класса. Но ведь при работе с IDE мы видим объявление класса, автодополнение кода правильно показывает нам все его члены. Да и «Find Declaration» правильно находит нужный заголовочный файл.

Дело в том, что все эти помощники говорят лишь о правильности на стадии компиляции, но не на стадии компоновки. Компилятор находит все нужные ему объявления. Поэтому он создает нормальный объектный файл. Проблема возникает во время компоновки, когда компоновщик пытается найти реализации методов.

Директива #include подключает только заголовочный файл с объявлениями методов, но не с их реализациями. Файл реализации оказывается не подключен. Поэтому, хотя он может лежать в каталоге вашего проекта, компоновщик ничего не знает о нем.

Для исправления этой ситуации вам нужно правильно подключить модуль к проекту (через меню Project/Add to Project). Благодаря этому, пути к обоим файлам (заголовочному и реализации) будут прописаны в файле проекта (с расширением bpr) и в момент компоновки будут известны. На основе этой информации компоновщик сможет правильно собрать весь проект.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *