Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

template hash tabela, cudan compile error

[es] :: C/C++ programiranje :: template hash tabela, cudan compile error

[ Pregleda: 1573 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ratep90

Član broj: 197955
Poruke: 6
188.124.209.*



+1 Profil

icon template hash tabela, cudan compile error05.02.2011. u 20:00 - pre 160 meseci
Pokusavam napraviviti kontejner hash tabelu, ali dobijam slijedecu gresku od kompajlera:
warning C4346: 'htabela<KEY,VALUE,CAP>::par' : dependent name is not a type
1> prefix with 'typename' to indicate a type
Koristim VS 2010 c++ kompajler.
Greska se tice zaglavlja funkcije "nadji".



//Interfejs klase i definicija funkcije "nadji"

namespace {const int n=97; }
template<class KEY,class VALUE,int CAP>
class htabela{


struct par{
KEY prvi;
VALUE drugi;
bool stanje;
par():stanje(false){}
};

par* tab;
void kopiraj(const htabela&);
void brisi(){delete []tab;}

public:
htabela();
void dodaj(const KEY&,const VALUE&);
void brisi(const KEY&);
const par& nadji(const KEY&);
htabela& operator=(const htabela&);
htabela(htabela& h){brisi(); kopiraj(h);}
~htabela(){brisi();}

};

template<class KEY,class VALUE,int CAP>
const htabela<KEY,VALUE,CAP>::par& htabela<KEY,VALUE,CAP>::nadji(const KEY& key)
{
int trans_key=key;
int i=0;
while(tab[trans_key%n].prvi!=key && i<CAP) trans_key+=i++;
if(i==CAP) throw "KLJUC NE POSTOJI";
return tab[trans_key%n];
}
Gdje grijesim?
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.psit.rs.



+9 Profil

icon Re: template hash tabela, cudan compile error07.02.2011. u 15:28 - pre 160 meseci
Umesto:

Code:

const htabela<KEY,VALUE,CAP>::par& htabela<KEY,VALUE,CAP>::nadji(const KEY& key)


bi trebalo da imaš:

Code:

const typename htabela<KEY,VALUE,CAP>::par& htabela<KEY,VALUE,CAP>::nadji(const KEY& key)


jer je par zavisno ime od templejt argumenata KEY, VALUE i CAP i bez ključne reči typename se tretira kao static member, a ne kao ugnježdeni tip.

Da ne pokrećemo temu gde je neophodno imati typename, a gde se implicitno podrazumeva, ovde ga treba koristiti jer onda kompajleru nedvosmisleno daješ do znanja da je u pitanju tip, a ne member promenljiva. Teoretski, zbog konteksta verovatno ni ovde ne bi morao da imaš typename, ali bi to dosta zakomplikovalo posao kompajleru.
 
Odgovor na temu

[es] :: C/C++ programiranje :: template hash tabela, cudan compile error

[ Pregleda: 1573 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.