This:
// ...
test multiplystuff(test a,test b){
return a*b;
}
// ...
Это похоже на шаблон функции?Для компилятора это не так.Даже для людей, если я увижу, что ожидал, что это не шаблон функции.
Теперь давайте снова добавим контекст:
template<class test> // has template parameters
test addstuff(test a, test b) {
return a + b;
}
// no template parameters
test multiplystuff(test a,test b) { // cannot access test?
return a * b;
}
Одна функция - это шаблон, а втораяявно нет.
Ожидается, что test
будет доступен во второй функции, все равно что ожидать, что аргумент будет доступен для другой функции:
// has int parameter
void func1(int a) { /* ... */ }
// no int parameter
void func2() {
// cannot access a
}
В этом примере a
- этовыходит за рамки func2
.
То же самое происходит с шаблоном вашей функции.Аргумент шаблона недоступен за пределами функции.
Очевидно, что решение заключается в добавлении отсутствующего аргумента во вторую функцию.