Witam,
ostatnio zainteresowałem się szablonami i postanowiłem napisać własny pojemnik będący listą.
Dlaczego nie mogę utworzyć listy struktur zdefiniowanych przez siebie w funkcji main?
Oto mój kod:
lista.h
#ifndef LISTA_H
#define LISTA_H
#include <iostream>
#include <string>
template <typename T>
class Lista
{
public:
Lista();
void dodajNaKoniec(T dana);
void dodajNaPoczatek(T dana);
void wypisz();
~Lista();
private:
struct TLista{
T dana;
TLista *poprzedni;
TLista *nastepny;
};
TLista *pierwszy;
TLista *ostatni;
};
#endif // LISTA_H
lista.cpp
#include "lista.h"
template <typename T>
Lista<T>::Lista() : pierwszy(0), ostatni(0)
{
}
template <typename T>
void Lista<T>::dodajNaPoczatek(T dana){
TLista *e = new TLista;
e->dana = dana;
e->nastepny = 0;
e->poprzedni = 0;
if(pierwszy){
pierwszy->poprzedni = e;
e->nastepny = pierwszy;
pierwszy = e;
}
else{
pierwszy = e;
ostatni = e;
}
}
template <typename T>
void Lista<T>::dodajNaKoniec(T dana){
TLista *e = new TLista;
e->dana = dana;
e->nastepny = 0;
e->poprzedni = 0;
if(ostatni){
ostatni->nastepny = e;
e->poprzedni = ostatni;
ostatni = e;
}
else{
pierwszy = e;
ostatni = e;
}
}
template <typename T>
void Lista<T>::wypisz(){
TLista *temp;
for(temp = pierwszy; temp != ostatni; temp = temp->nastepny)
std::cout << temp->dana << ", ";
std::cout << temp->dana << "\n";
}
template <typename T>
Lista<T>::~Lista(){
}
template class Lista<unsigned int>;
template class Lista<std::string>;
main.cpp
#include <iostream>
#include "lista.h"
struct osoba{
std::string imie;
std::string nazwisko;
};
int main()
{
std::cout << "Lista unsigned intow:\n";
Lista<unsigned int> l;
l.dodajNaPoczatek(14);
l.dodajNaPoczatek(25);
l.dodajNaPoczatek(3);
l.wypisz();
std::cout << "\nLista stringow:\n";
Lista<std::string> s;
s.dodajNaKoniec("Grzegorz");
s.dodajNaKoniec("Iksinski");
s.dodajNaKoniec("Wroclaw");
s.wypisz();
std::cout << "\n";
system("PAUSE");
}
Próbowałem jakoś dodać deklarację w pliku lista.cpp czyli coś w rodzaju:
'template class Listastd::string' ale zamiast std::string nie wiem co wstawić żeby było dobrze.
Plik lista.cpp nie wie nic o strukturze 'Osoba', a zadeklarowanie jej w pliku lista.h nic nie daje.
Nie mogę w pliku main.cpp zrobić takiego obiektu jak ten:
Lista<Osoba> os;
Bardzo proszę o jakąś podpowiedź.
Pozdrawiam
Grzegorz