linked_list.cpp.
в main.cpp я использую это класс добавив #include "linked_list.h", но компилятор выдаёт undefined reference to `LinkedList<State>::Add(State*)'. Если добавить #include "linked_list.cpp", то проблема пропадёт, но насколько я знаю надо же инклюдить только хэдэр, так? что я делаю не так?
Как собираете?
Ctrl + F5 в CLion
Шаблон должен быть доступен в точке инстанцирования, верни все в h file
Там где-то должны быть настройки сборки, которые вы написали
то есть всю реализацию перенести в хэдэр?
Если это шаблон, то да. Но все таки стоит осилить сборку нескольких .cpp файликов
Если вам важно логическое разбиение на файлы, то иногда реализации шаблонов выносят в *.tpp или *.ipp файлы и подключают их как заголовки (иногда прямо внизу самого заголовка), но это редкость на практике — часто это приносит значительное число неудобств
а какие проблемы могут возникнуть?
Вследствие чего? Вопрос кажется слишком неопределённым
вы сказали что на практике это часто приносит значительное число неудобств
Неудобства — это не обязательно проблемы. Так уж сложилось, что шаблоны очень сложны и действительно обобщённый код пишется очень аккуратными и небольшими функциями, где сама сигнатура составляет приличную часть логики самой функции. В таких условиях вынос определений за пределы класса просто приводит к значительному и практически бессмысленному дублированию кода внутри класса и снаружи
Обсуждают сегодня