Mój problem polega na tym, że napisałem funkcję specjalizowaną “porównaj”, która została zadeklarowana po szablonie funkcji i przed jej wywołaniem, ale kiedy w main próbuję ją wywołać, to następuje odwołanie do funkcji szablonowej i przez to program nie może się skompilować. Oto kod:
#include
#include
using namespace std;
template
const T& kwadrat_liczby(const T &liczba)
{
return liczba*liczba;
}
template
const B& suma(const A &liczba1, const B& liczba2)
{
return liczba1+liczba2;
}
template
const T& tablice( T tab[5])
{
int min;
for(int i=0;i<5;i++)
{
cout << "Podaj liczbe " << i << ": ";
cin >> tab[i];
cout << endl;
}
min = tab[0];
for(int i=0;i<5;i++)
{
if(tab[i]
min = tab[i];
}
return min;
}
template
const T porownaj(const T&liczba1, const T& liczba2)
{
if(liczba1>liczba2)
{
return 1;
}
if(liczba1
{
return -1;
}
else
{
return 0;
}
}
void porownaj(const char* tekst1, const char* tekst2)
{
if(strlen(tekst1)>strlen(tekst2))
{
cout << "Tekst1 jest dluzszy" << endl;
}
if(strlen(tekst1)
{
cout << "Tekst2 jest dluzszy" << endl;
}
else
{
cout << "Obydwa teksty sa rowne" << endl;
}
}
int main()
{
int b,c=5;
float a=6.54;
b=5;
int C[5];
char *X = new char[80];
char *Y = new char[80];
X = "Witaj";
Y = "Swiecie";
int tab[5];
cout << kwadrat_liczby(b) << endl;
cout << suma(b,a) << endl;
cout << porownaj(b,c) << endl;
porownaj(X,Y);
cout << tablice(tab) << endl;
return 0;
}
char *Y = new char[80];
X = "Witaj";
Y = "Swiecie";
Czemu w porownaj zwracasz T? Przy specjalizacji masz niewłaściwe konwersje z int na char*
Jeśli chcesz aby porownaj(const char*, const char*) było specjalizacją, to czemu w niej nic nie zwracasz? A wygląda na to, że nie przeładowuje jej właśnie przez te const
Ponadto g++ wyrzuca ostrzeżenia, bo zwracasz referencje do lokalnych/tymczasowych zmiennych.
Ogólnie niezbyt przemyślany ten kod, przy innych specjalizacjach pewnie miałbyś więcej błędów.