Нетипичный параметр в шаблоне функции - PullRequest
0 голосов
/ 02 июля 2018

У меня очень простая шаблонная функция, но есть путаница в том, как создать экземпляр / вызвать функцию из-за нетипичного параметра. Определение функции шаблона выглядит следующим образом:

template<typename Glorp, int size>
Glorp min(Glorp array[size])
{

Glorp minival = array[0];
for (int i = 0; i < size; i++)
if (array[i] < minival)
    minival = array[i];

return minival;
}

Теперь в main() у меня есть следующий код:

void main()
{
const int size=5;
int array[size];
for (int i = 0; i < size; i++)
    cin >> array[i];

int p = min(array[size]);
cout << p;
}

Это возвращает мне сообщение об ошибке:

Error   1   error C2783: 'Glorp min(Glorp *)' : could not deduce template argument for 'size'   c:\users\tamara\documents\visual studio 2013\projects\nuevoprojecto\nuevoprojecto\main.cpp  23  1   NuevoProjecto

Как мне вызвать эту функцию из main()? Я не могу найти ответ на этот вопрос, единственные примеры, которые я видел, были для не типовых параметров в шаблонных классах

1 Ответ

0 голосов
/ 03 июля 2018

Я вижу две основные проблемы в вашем коде

1) синтаксис для функции-шаблона, получающей массив, определяющий тип и размер, следующий

template <typename Glorp, int size>
Glorp min (Glorp (&array)[size])
 {
   // ...........^^^^^^^^
 }

2) Вы должны позвонить без [size]

int p = min(array[size]); // wrong
int p = min(array);       // correct

поскольку при передаче array[size] вы пытаетесь передать один int из нераспределенной позиции памяти (правильные значения array находятся в диапазоне от array[0] до array[size-1]).

Незначительная проблема: main() возвращает int, а не void.

Не по теме предложение: если вы можете использовать хотя бы C ++ 11, по возможности используйте std::array вместо старых массивов в стиле C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...