Ваш учитель хочет, чтобы вы реализовали класс шаблона. Дело в шаблонах заключается в том, что им нужно создать экземпляр с правильным типом шаблона, а это значит, что вы не можете создать двоичный файл, прежде чем знаете, какой тип он будет. Вот почему реализация обычно записывается внутри файла заголовка. Посмотрите f.e. here ...
Если вы новичок в шаблоны, просто спросите дядю google или муравей wiki;)
ADD:
Проще говоря ... если у вас есть что-то в foo.cpp
, он переводится в двоичный файл, а соответствующий заголовок foo.hpp
служит ссылкой на то, какие функции существуют в двоичном формате, который я мог бы использовать из моего другого кода. Важно то, что этот бинар больше не меняется (действительно).
С другой стороны, шаблоны не могут быть преобразованы в двоичный файл, пока вы не знаете, какой тип он будет работать на ... Если вы используете класс шаблона один раз int
и в другой раз с vector<double>
для параметра шаблона , результирующий двоичный файл может быть очень разным ... Поэтому вы можете только скомпилировать код в двоичный файл, как только вы знаете тип, и поэтому вам нужно передать код (внутри заголовка), а не только прототипы функций ...
Надеюсь, это ясно. Это ведь почти 3 часа ночи здесь.
Если нет, this должен быть очень полным.
В файле '.h' нет ничего волшебного, файла' .hpp' или любого другого файла. Компилятор просто обрабатывает все файлы '# include', как указано. Расширения вашего файла могут быть '.h',' .hpp', '.xyz' или' .hjgiurejkcxkj'. Он по-прежнему будет действительным C++, если файлы, о которых идет речь, после логического включения содержат допустимый код C++. –
Спасибо, я просто хотел убедиться, что компиляторы не будут скомпилировать его по-другому из-за расширения. –
@AlessandroLorusso Вы, как правило, не компилируете заголовочные файлы самостоятельно, поэтому проблем нет. –