Ваш инструктор не прав.Вы не включаете cpp
файлы в заголовочные файлы.
Компилятор будет обрабатывать их везде, где включен заголовок.Если вы включите заголовок в файл, для этой единицы перевода будут определены все функции, реализованные в файлах cpp
.Если вы включите его в нескольких местах, несколько блоков перевода будут содержать один и тот же символ, что приведет к указанной вами ошибке компоновщика.
Что может сработать, если вы объявите реализации как inline
, но этовсе еще довольно противный.
РЕДАКТИРОВАТЬ: Видя, как классы являются шаблонами, я могу вспомнить одну проблему, заключающуюся в том, что вы специализируете его для одного и того же типа дважды.Я бы удалил файл cpp
из компиляции, хотя, если вы можете, вы должны изменить расширение на impl
или что-то еще.Таким образом, компилятор не будет компилировать его отдельно, но он все равно будет доступен для файлов, которые специализируются на вашем классе.