Chciałabym zdefiniować funkcje dodawania elementu do listy, wyświetlania listy i usuwania listy dla elementów różnych typów - w pierwszym przypadku dla typów zmiennoprzecinkowych, w drugim dla danych typu student. Gdy w deklaracji funkcji dodawania elementu wpiszę np.
template<class T>
T *add_to_list(T *first, element data)
funkcja działa poprawnie dla elementów zmiennoprzecinkowych, ale gdy próbuję zamienić "element" na typ szablonowy np.
template <class X>
template<class T>
T *add_to_list(T *first, X data)
pojawiają się komunikaty o błędach
"Error 1 error C3857: 'add_to_list': multiple template parameter lists are not allowed
Error 2 error C2563: mismatch in formal parameter list"
więc pewnie błąd jest w użyciu szablonów.
Proszę o pomoc lub wskazówki jak rozwiązać ten problem.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
/*__________________________________________________*/
/* LISTA ZMIENNOPRZECINKOWA */
struct element
{
double x;
};
struct lista
{
element data;
lista *next;
};
/*__________________________________________________*/
/* LISTA STUDENT */
struct student
{
string imie;
string nazwisko;
string indeks;
};
struct listaStudent
{
student data;
listaStudent *next;
};
/*__________________________________________________*/
template <class X>
template<class T>
T *add_to_list(T *first, X data) //dodaje wartosc na poczatek listy
{
T *wsk = new T;
wsk->data = data;
wsk->next = first;
return wsk;
}
/*__________________________________________________*/
template<class T>
void print_list(T *first) //wyswietla liste
{
while (first != NULL) //do konca listy
{
cout << "Lista --> " << first->data.x << " "; //wyswietlamy wartosc
first = first->next; //pzesuwamy sie na nastepny element listy
}
}
/*__________________________________________________*/
template<class T>
T *clear(T *first) //czyszczenie listy studentow
{
T *wsk;
while (first != NULL)
{
wsk = first->next;
free(first);
first = wsk;
}
return first;
}
/*__________________________________________________*/
void typdouble()
{
int i, n, x;
cout << "Podaj ile elementow \n";
cin >> n;
double *tab = new double[n];
for (i = 0; i<n; i++)
{
cout << "Podaj element " << i + 1 << '\n';
cin >> tab[i];
}
lista *first = NULL;
lista *last = NULL;
element data;
// DODAWANIE PIERWSZEGO ELEMENTU
for (i = 0; i<n; i++)
{
data.x = tab[i];
if (i == 0)
first = last = add_to_list(first, data);
else
first = add_to_list(first, data);
cout << "Dodaj pierwszy " << data.x << '\n';
}
cout << '\n';
print_list(first);
cout << '\n';
cout << '\n';
first = last = clear(first);
cout << '\n';
cout << '\n';
}
void typstudent()
{
int i, n;
cout << "Podaj ile elementow \n";
cin >> n;
student *tab = new student[n];
//PODAWANIE DANYCH STUDENTOW
for (i = 0; i<n; i++)
{
cout << "Podaj element " << i + 1 << '\n';
cout << "Imie: " << '\n';
cin >> tab[i].imie;
cout << "Nazwisko: " << '\n';
cin >> tab[i].nazwisko;
cout << "Indeks: " << '\n';
cin >> tab[i].indeks;
}
listaStudent *first = NULL;
listaStudent *last = NULL;
student data;
// DODAWANIE PIERWSZEGO ELEMENTU
for (i = 0; i<n; i++)
{
data.imie = tab[i].imie;
data.nazwisko = tab[i].nazwisko;
data.indeks = tab[i].indeks;
if (i == 0)
first = last = add_to_list(first, data);
else
first = add_to_list(first, data);
cout << "Dodaj pierwszy " << data.imie << '\n';
}
cout << '\n';
print_list(first);
cout << '\n';
cout << '\n';
}
int main()
{
typdouble();
system("pause");
return 0;
}