Szablony funkcji i specjalizacja z tablicą pięciu łańcuchów

0

Witam
Mam do wykonania jedno z zadań z podręcznika "Szkoła programowania" o treści: Napisz szablon funkcji maxn() pobierającej jako parametry tablicę typu T oraz liczbę elementów tej tablicy, zwracającej największy element tablicy. Przetestuje w programie 5-elementową tablicę wartości int i 4-elementową tablicę double. Program powinien korzystać ze specjalizacji przyjmującej jako parametr tablicę typu char, zwracającej adres najdłuższego napisu. Jeśli jest kilka najdłuższych napisów, funkcja powinna zwracać adres pierwszego z nich. Sprawdź specjalizację z tablicą pięciu łańcuchów.

Niestety nie ogarniam tej części ze specjalizacją. Kompilator wyrzuca mi błąd o niezgodności specjalizacji z żadnym z template`ów. Ktoś byłby w stanie wytłumaczyć co robię nie tak i jak to poprawić?

 
#include <iostream>
#include <cstring>

template <typename T>	
void fill_array(T &a, int n = 5)
{
	std::cout << "\nPodaj " << n << " wartości do tablicy: " << std::endl;
	for (int i = 0; i < n; ++i)
	{
		std::cin >> a[i];	
	}
}

template <typename T>
void show_array(const T &a, int n = 5)
{
	std::cout << "\nOto Twoja tablica: " << std::endl;
	for (int i = 0; i < n; ++i)
	{
		std::cout << i+1 << ". " << a[i] << std::endl;
	}
}

template <typename T>
T get_return(T a[], int n = 5)
{
	T temp = a[0];
	for (int i = 0; i < n; ++i)
	{
		if (a[i]>temp) temp = a[i];
	}
	return temp;
}

template <> 
char get_return(char *words, int n)
{
	char longestword[20], temp[20];
	short i = 0, j = 0;
	
	while (words[i] != '\n')
	{
		temp[j] = words[i];
		++i;
		++j;
		if (words[i] == ' ' || words[i] == '\n' || words[i] == '\n')
		{
			++i;
			if (strlen(temp) > strlen(longestword)) strcpy(longestword, temp);
			j = 0;
		}
	}
	
	return longestword;
}

char *fill_charray()
{
	char *wyrazy = new char[100];
	std::cout << "\nWprowadź coś do tablicy charów: " << std::endl;
	std::cin.get();
	std::cin.getline(wyrazy, 100);
	return wyrazy;
}
/*------------------------------------------------------------------------*/
int main()
{
	double tab_double[4];
	double max_double;
	int tab_int[5];
	int max_int;
	
	fill_array(tab_int);
	fill_array(tab_double, 4);
	show_array(tab_int);
	show_array(tab_double, 4);
	max_int = get_return(tab_int);
	max_double = get_return(tab_double, 4);
	
	std::cout << "\nTwój największy int: " << max_int << std::endl;
	std::cout << "Twój największy double: " << max_double << std::endl;
	
	char *charray = fill_charray();
	char *tlword = get_return(charray, 100);
	
	return 0;
}
1
template <> 
char get_return(char *words, int n) 

Nie da się wyspecjalizować w ten sposób szablonu funkcji.
Poza tym funkcja powinna zwrócić adres łanćucha (wskaźnik), nie wartość typu char

Użyj specjalizowanej przeciążonej funkcji

char* get_return(char* words[], int n) 

1 użytkowników online, w tym zalogowanych: 0, gości: 1