Вроде всегда так класс разделял в h-хедерные файлы и cpp-файлы с кодом, но в этот раз что-то пошло не так :( Пишет Unresolved external blablabla.obj
Main Header CPP
Подскажите, пожалуйста, где я в этот раз ошибся?
Проблема в шаблонах. Шаблоны надо размещать полностью в header'е.
Дело в том, что шаблонный класс не есть класс, и не генерирует вовсе никакого кода. Код будет сгенерирован «задним числом» в момент инстанциации шаблона, то есть, в тот момент, когда вы объявляете шаблон с конкретным параметром! (В вашем случае это main
.) Если выгрузить имплементацию шаблона в .cpp
, она будет в этой точке компиляции недоступна, и приведёт к ошибке компоновки.
Есть, правда, ещё один путь: если вы точно знаете все типы, с которыми будет когда-либо инстанциироваться шаблон, вы можете оставить имплементацию в .cpp
, и добавить туда список для явной инстанциации:
template class Stack<char>;
Но это сработает только лишь если вы контролируете все места, где ваш шаблон будет использован. Если вы пишете библиотеку общего пользования, вы не можете знать наперёд, с какими типами её будут использовать клиенты, то есть этот трюк не пройдёт, и вам таки придётся писать всё в header'е. (Так работает вся STL, например.)
Дополнительное чтение по теме: [C++ FAQ/Templates/linker errors].
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
и снова доброго вечера всем форумчанамВозникла проблема с переопределением объектов std::function<void()> и будто вещь это не особо сложная, а разобраться...
Прошу, подскажите, мне нужно перенести весь текст элемента ListBox в другойЭтот код переносит почему-то только часть текста: