Правильное использование явного создания экземпляра шаблона для функций?

В настоящее время я выполняю упражнение, для которого я должен использовать матрицы шаблонов в качестве параметров во всех своих функциях и принудительно указывать необходимые типы данных в заголовке. Хотя я еще не знаю, как это сделать. Есть заголовок со следующей функцией и вторая функция с таким же синтаксисом (а также с тем же именем шаблона, если это уместно?):

template <typename multityp> void matsum( multityp **, multityp **, multityp **, int, int );

template void matsum <int> (int**, int**, int**, int, int);
template void matsum <double> (double**, double**, double**, int, int);
template void matsum <bool> (bool**, bool**, bool**, int, int);

При компиляции я получаю переменную ошибки или поле 'matsum', объявленное недействительным для многотипности в следующей функции, которую я поместил в другой заголовок, после чего несколько переменных не были объявлены ошибками:

void matsum ( multityp **matrix1, multityp **matrix2, multityp **ergebnis, int zeilen, int spalten ){
      //Does stuff
}

person Mareya    schedule 21.11.2020    source источник
comment
Не могли бы вы привести полный воспроизводимый пример? Вряд ли найти проблему только по этим фрагментам кода.   -  person Daniel Langr    schedule 21.11.2020
comment
Глядя на этот ответ, может оказаться, что multityp не объявлено: stackoverflow.com/questions/364209/ . Учитывая, как multityp используется выше, вам не хватает template <typename multityp> перед void matsum?   -  person parktomatomi    schedule 21.11.2020
comment
@DanielLangr Это действительно весь код для этой функции, весь остальной код относится к другим функциям, которые являются структурно точными копиями этой. Единственное, что нужно добавить, это хранитель заголовка с #ifndef [...], поэтому ввод этого в .hpp и компиляция должны привести к предоставленным ошибкам.   -  person Mareya    schedule 21.11.2020
comment
@parktomatomi Ну, теперь я чувствую себя немного глупо ... Я действительно не думал о template <typename multityp> как о части заголовка функции, поэтому я оставил его для определения тела. Теперь это работает!   -  person Mareya    schedule 21.11.2020


Ответы (1)


Согласно добавлению комментария парктоматоми

template <typename multityp>

перед объявлением тела сделал свое дело:

template <typename multityp> void matsum ( multityp **matrix1, multityp **matrix2, multityp **ergebnis, int zeilen, int spalten ){
      //Does stuff
}
person Mareya    schedule 21.11.2020