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

P.S. Если в реализации метода допустить ошибку, файл с реализацией нормально "компилируеться". Странно. Причем обычные функции (вернее, их реализации) нормально вызываються через .h-extern объявление
Re: разнести интерфейс класса и реализацию по разным файлам
От: NikeByNike Россия  
Дата: 21.07.08 23:15
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Попробовал разделить заголовок класса и его реализацию по разным файлам — интерфейс в .h, реализацию — в .cpp. Ну и создаю еще один .cpp-файл с функцией main. При вызове любого метода (в т ч конструктора) линкер VS 2008 начинает ругаться о том, что невозможно найти символы методов. Может кто-то подскажет, что я не так делаю? Возможно нужно указать какие-то параметры в Project Options?

А>Проект создавался с нуля (Empty project), файлы добавлял вручную (Add Item).
А>Класс — шаблонный (может это повлияло?).
Повлияло.
Шаблонные функции инстанцируются в месте вызова.
Если в месте вызова они не видны — компилятор не сможет их откомпилировать и ты получаешь ошибку линковщика.
Вывод:
1. Можно поместить их в хидер.
2. Можно поместить их в inl файл, который инклудится в хидер. Дополнительный файл по сути расширение хидера, единственный плюс — помогает отделить интерфейс от реализации.
3. можно поместить их в тот cpp в котором они вызываются.
Нужно разобрать угил.
Re: разнести интерфейс класса и реализацию по разным файлам
От: VoidEx  
Дата: 22.07.08 02:27
Оценка:
Здравствуйте, Аноним, Вы писали:

4. Можно явно инстанцировать несколько реализаций, если использоваться будут только эти несколько, тогда можно оставить такое разделение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.