Szablon funkcji i specjalizacja jawna, prosty program

0

oto tresc zadania: Napisz szablon funkcji maxn() pobierajacej jako parametr tablice typu T oraz liczbe elementow tej tablicy, zwracajacej najwiekszy element tablicy. Przetestuje w programie 5-elementowa tablice wartosci int i 4-elementowa double. Program powinien korzystac ze specjalizacji przyjmujacej jako parametr tablice typu char, zwracajacej sdres najdluzszego napisu. Jesli jest kilka najdluzszych lancuchow, funkcja powinna zwracac adres pierwszego z nich. Sprawdz specjalizacje z tablica 5 lancuchow.

cos tu jest nie tak w moim kodzie.

z gory dzieki za pomoc

#include <iostream>
#include <cstring>

using namespace std;

template <class T>
T maxn(T tab[], int n);

template <> char* maxn<char>(char tab[][20], int n);

int main()
{

    int tab[5]={2,7,6,4,3};
    cout<<maxn(tab,5)<<endl;;

    double tabl[4]={1.3,4.6,8.7,3.5};
    cout<<maxn(tabl,4)<<endl;


    char tablica[5][20]={ "Mik", "makaka", "najdluzszy", "sfs", "fdf"};
    cout<<maxn(tablica,5)<<endl;



    return 0;
}
template <class T>
T maxn(T tab[], int n)
{

    T max=tab[0];


    for (int i=1; i<5; i++){
    if (tab[i]>max)
    max=tab[i];

    else
    continue;

    }

    return max;

}

template <> char* maxn<char>(char tab[][20], int n){

    char *p=tab;   // to samo co &tab[0]

    for (int i=1; i<n; i++){
    if ((strlen(tab[i])) > (strlen(*p)))
    p=tab[i];

    else
    continue;
    }
    return p;

}

0
#include <iostream>
#include <cstring>

using namespace std;

template <class T>
T maxn(T tab[], int n);

//template <> char* maxn<char>(char tab[][20], int n){
//źle, ma być "T maxn<T>(T tab[], int n)", tyle że w miejsce "T" wstawiasz "const char*", czyli:
template <> const char* maxn<const char*>(const char* tab[], int n);

int main()
{

	int tab[5]={2,7,6,4,3};
	cout<<maxn(tab,5)<<endl;;

	double tabl[4]={1.3,4.6,8.7,3.5};
	cout<<maxn(tabl,4)<<endl;


	const char *tablica[5]={ "Mik", "makaka", "najdluzszy", "sfs", "fdf"};
	cout<<maxn(tablica,5)<<endl;



	return 0;
}


template <class T>
T maxn(T tab[], int n)
{
	T max=tab[0];

	for (int i=1; i<5; i++){
		if (tab[i]>max)
			max=tab[i];
	}

	return max;
}


template <> const char* maxn<const char*>(const char* tab[], int n)
{
	const char *p=tab[0];

	for (int i=1; i<n; i++){
		if ((strlen(tab[i])) > (strlen(p)))
			p=tab[i];
	}

	return p;

}
0

dzieki

0
// 86-template_specj.cpp - uzywa szablonu i specjalizacji

#include <iostream>
#include <cstring>

using namespace std;

template <class T>
T maxn(T * tab, int n);

template <>
char * maxn<char>(char tab[][40], int n);

int main()
{
    int t1[10] = {-5,-4,-3,-2,-1,0,1,2,3,4};
    double t2[5] = {10.9, 2.3, 1.0, -5.9, 200.5};
    char tab[3][40] =
    {
        "hello",
        "mayday",
        "12345678901234567890"
    };

    cout << maxn(t1, 10) << " " << maxn(t2, 5) << " " << maxn(tab, 3) << endl;

    return 0;
}
template <class T>
T maxn(T * tab, int n)
{
    T max = tab[0];

    for (int i = 0; i < n; i++)
        if (tab[i] > max)
            max = tab[i];

    return max;
}

template <>
char * maxn<char>(char tab[][40], int n)
{
    char * max = tab[0];

    for (int i = 0; i < n; i++)
        if (strlen(tab[i]) > strlen(max))
            max = tab[i];

    return max;
}
D:\cpp>g++ -Wall 86-template_specj.cpp
86-template_specj.cpp:12:8: error: template-id 'maxn<char>' for 'char* maxn(char
 (*)[40], int)' does not match any template declaration
86-template_specj.cpp: In function 'int main()':
86-template_specj.cpp:25:69: error: no matching function for call to 'maxn(char
[3][40], int)'
86-template_specj.cpp: At global scope:
86-template_specj.cpp:42:8: error: template-id 'maxn<char>' for 'char* maxn(char
 (*)[40], int)' does not match any template declaration

mam taki problem, nie wiem czemu sie tak dzieje

0

Specjalizacja szablonu:

T maxn(T * tab, int n);

dla typu char to:

char maxn(char* tab, int n);

a nie jak u Ciebie:

char* maxn(char tab[][40], int n);

Mam nadzieję, że złapałeś różnicę...

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