Весь код шаблона должен быть помещен в заголовочный файл. Это заполнить исправить проблемы с связью (это самый простой способ).
Это происходит потому, что компиляторы компилируют каждый исходный файл (.cc) отдельно от других файлов. С другой стороны, ему нужно знать, какой именно код он должен создать (т. Е. Чем заменяется T в шаблоне), и у него нет другого способа узнать это, если программист не скажет это явно или не включит весь код, когда шаблон инстанцирование происходит. То есть когда mylist.cc компилируется, он ничего не знает о пользователях mylist и о том, какой код необходимо создать. С другой стороны, если listuser.cc скомпилирован и присутствует весь код mylist, компилятор создает необходимый код mylist. Вы можете прочитать больше об этом в здесь или в Страуструпе.
В вашем коде есть проблемы, что делать, если пользователь запрашивает отрицательный или слишком большой (больше, чем количество элементов в списке). И я не выглядел слишком много.
Кроме того, я не знаю, как вы планируете его использовать, но ваш оператор [] имеет O (N) время, что, вероятно, легко приведет к O (N * N) циклам ...