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;
}