Я только что получил мое первое настоящее приложение на C++ после работы с некоторыми книгами, изучающими язык. Насколько я понимаю, ваши исходные файлы cpp требовали сопроводительного заголовка, но одна из библиотек моего проекта прекрасно работает с несколькими файлами cpp, которые НЕ включают заголовок cooverponding. Этот конкретный cpp реализует класс, найденный в заголовке, который имеет другое имя и несколько других частей кода, помимо только первоначального объявления класса.Компиляция cpp без соответствующего заголовка
Как cpp может скомпилировать функции, принадлежащие классу, о котором он не знает?
Может ли реализация этих функций быть скомпилирована самостоятельно и просто вызывается, когда клиентское приложение, использующее библиотеку (и включающее заголовок с объявлением класса), вызывает соответствующую функцию-член? Если это так, то как бинация реализации, на которую ссылается клиентское приложение? (Я предполагаю, что это компоновщик ... но я хотел бы, чтобы это прояснилось).
Я ожидаю, что ответ может вызвать недоразумение в отношении процесса включения и компиляции, и я бы очень хотел изучить этот аспект C++. Спасибо!
Файл заголовка в текстовом виде включен в блок переводов. Нет волшебства. Наоборот, заголовочные файлы - это поразительно грубые реликвии 1970-х годов. Вам вообще не нужны файлы заголовков, а не то, что это хорошая идея серьезно относиться к этой идее. Если у вас есть единица перевода, которая не предоставляет каких-либо функциональных возможностей другим участникам системы, тогда нет необходимости в заголовке. Хорошим примером может служить небольшая единица перевода, содержащая вашу функцию 'main'. –
взгляните на это SO qn о компиляции и ссылках: http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work – Sanish