В настоящее время я изучаю C ++, поэтому у меня мало знаний по этой теме. Я использую книгу C ++ primer plus, и вот проблема:
Напишите шаблонную функцию maxn (), которая принимает в качестве аргументов массив элементов типа T
и целое число, представляющее количество элементов в массиве, и которое возвращает
самый большой элемент в массиве. Проверьте это в программе, которая использует шаблон функции с
массив из шести значений типа int и массив из четырех двойных значений. Программа должна также
включить специализацию, которая принимает массив указателей на символ в качестве аргумента и
количество указателей в качестве второго аргумента и возвращает адрес самого длинного
строка. Если несколько строк связаны с самой длинной длиной, функция должна
вернуть адрес первого связанного для самого длинного Проверьте специализацию с массивом
пять строковых указателей.
Вот мой код:
#include <iostream>
#include <cstring>
using namespace std;
template <class T> T maxn(T arr[] , int n);
template <> char * maxn<char (*)[10]> (char (*arr)[10] , int n);
int main()
{
double array[5] = { 1.2 , 4.12 ,7.32 ,2.1 ,3.5};
cout << endl << maxn(array , 5) << endl << endl;
char strings[5][6] = { "asta" , " m" , "ta" , "taree" , "e"};
cout << maxn(strings , 5) << endl;
return 0;
}
template <class T> T maxn(T arr[] , int n)
{
T max = 0;
for (int i = 0 ; i < n ; ++i)
{
if (arr[i] > max)
max = arr[i];
}
return max;
}
template <> char * maxn<char (*)[10]> (char (*arr)[10] , int n)
{
int length = 0;
int mem = 0;
for ( int i = 0 ; i < n ; ++i)
{
if (strlen(arr[i]) > length)
{
length = strlen(arr[i]);
mem = i;
}
}
return arr[mem];
}
Я пытаюсь передать массив строк. Я получаю следующие ошибки:
g++ -Wall -o "untitled5" "untitled5.cpp" (in directory: /home/eukristian)
untitled5.cpp:6: error: template-id ‘maxn<char (*)[10]>’ for ‘char* maxn(char (*)[10], int)’ does not match any template declaration
untitled5.cpp: In function ‘int main()’:
untitled5.cpp:14: error: no matching function for call to ‘maxn(char [5][6], int)’
untitled5.cpp: At global scope:
untitled5.cpp:31: error: template-id ‘maxn<char (*)[10]>’ for ‘char* maxn(char (*)[10], int)’ does not match any template declaration
Compilation failed.
Я совершенно уверен, что совершил какую-то ошибку новичка и не могу ее обнаружить.
Спасибо.