Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Template  (Citit de 1613 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
imilenco
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« : Ianuarie 09, 2007, 21:41:35 »

Buna!

Nu am gasit search asa ca daca mai exista un subiect pe aceasta tema imi cer scuze.

Vreau sa imi fac un template pentru o lista. In template am declarat un pointer static dar nu stiu de ce cand il declar imi da eroare. Am sa dau si un exemplu ca poate nu m-am exprimat cum trebuie:

template <typename T> class Lista
{
      static Lista *head;
      Lista *next;
public:
...
};

class XXX
{
...
};

Lista<XXX> *Lista<XXX> :: head = NULL;

Eroarea care o primesc este: "too few template-parameter-lists "


P.S. Exista cumva vrea diferenta intre declaratia <typename T> si <class T> sau e mai bine una sa o folosesti candva si pe cealalta altcandva?


Mersi anticipat de ajutor
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #1 : Ianuarie 09, 2007, 22:09:57 »

nu exista nici o diferenta intre <typename T> si <class T>, doar ca <typename T> ii 'notatia' mai noua. cam atata te pot ajuta. nu stiu dc nu iti merge codu, sorry.
Memorat

vid...
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #2 : Ianuarie 10, 2007, 16:58:55 »

Dubios.

Am cautat putin pe net dar nu am inteles exact cum functioneaza variabilele statice ale unei clase template in C++.
Problema este momentul in care este creata variabila statica. Pe langa asta si declararea este neclara, desi are sens din punct de vedere sintactic al C++.
In orice caz, tu trebuie sa scrii:
Cod:
template <typename T> Lista <T> *Lista <T> :: head = NULL;

Ceea ce nu inteleg este cum o sa te ajute variabila statica.
Variabila statica este aceiasi pentru toate clasele de acelasi fel, iar in clasa ta cam pierzi capul listei.
Cod:
#include <cstdio>

template <typename T> class Lista {
public:
static Lista<T> *head ;
};

template <typename T> Lista<T> *Lista<T>::head = NULL;

int main() {
Lista <int> A, B, C;

A.head = &B;
C.head = &A;
B.head = &C;

D.head = &E;
E.head = &D;

        // Afiseaza adresele fiecarei clase
printf("%p %p %p\n", &A, &B, &C);

        // Afiseaza aceiasi valoare, adresa clasei C
printf("%p %p %p\n", A.head, B.head, C.head);

printf("%p %p\n", &D, &E);

printf("%p %p\n", D.head, E.head);


return 0;
}
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines