Во-первых, шаблоны создаются в время компиляции , поэтому необходимо использовать постоянное значение: оно не может быть вычислено во время выполнения.Фактически, когда вы компилируете свой код, класс будет скомпилирован один раз для каждого различного использования его параметров.
После этого код должен работать, если нет других синтаксических ошибок.
AnВажное замечание, прежде чем сходить с ума: вы не можете разбивать шаблоны в файле header / cpp, вы должны написать заголовок и реализацию в одном файле!