разнести интерфейс класса и реализацию по разным файлам
От:
Аноним
Дата:
21.07.08 23:07
Оценка:
Попробовал разделить заголовок класса и его реализацию по разным файлам — интерфейс в .h, реализацию — в .cpp. Ну и создаю еще один .cpp-файл с функцией main. При вызове любого метода (в т ч конструктора) линкер VS 2008 начинает ругаться о том, что невозможно найти символы методов. Может кто-то подскажет, что я не так делаю? Возможно нужно указать какие-то параметры в Project Options?
Проект создавался с нуля (Empty project), файлы добавлял вручную (Add Item).
Класс — шаблонный (может это повлияло?).
Спасибо
P.S. Если в реализации метода допустить ошибку, файл с реализацией нормально "компилируеться". Странно. Причем обычные функции (вернее, их реализации) нормально вызываються через .h-extern объявление
Re: разнести интерфейс класса и реализацию по разным файлам
Здравствуйте, Аноним, Вы писали:
А>Попробовал разделить заголовок класса и его реализацию по разным файлам — интерфейс в .h, реализацию — в .cpp. Ну и создаю еще один .cpp-файл с функцией main. При вызове любого метода (в т ч конструктора) линкер VS 2008 начинает ругаться о том, что невозможно найти символы методов. Может кто-то подскажет, что я не так делаю? Возможно нужно указать какие-то параметры в Project Options? А>Проект создавался с нуля (Empty project), файлы добавлял вручную (Add Item). А>Класс — шаблонный (может это повлияло?).
Повлияло.
Шаблонные функции инстанцируются в месте вызова.
Если в месте вызова они не видны — компилятор не сможет их откомпилировать и ты получаешь ошибку линковщика.
Вывод:
1. Можно поместить их в хидер.
2. Можно поместить их в inl файл, который инклудится в хидер. Дополнительный файл по сути расширение хидера, единственный плюс — помогает отделить интерфейс от реализации.
3. можно поместить их в тот cpp в котором они вызываются.
Нужно разобрать угил.
Re: разнести интерфейс класса и реализацию по разным файлам