PDA

View Full Version : [c++] templates, set e iteratori, errore strano


Vecchia Spugna
21-05-2007, 12:10
Salve ragazzi

facendo una cosa del genere

template <class T> T *cercaPerId(unsigned ident, set<T *> &tabella)
{
set <T *>::iterator it;
.....
}

il compilatore mi dice che vuole il punto e virgola prima di it, che è un modo come un altro per dirmi non so che dirti ma a me questa cosa non mi va bene.

sapreste indicarmi un modo alternativo per fare la stessa cosa?
vi ringrazio in anticipo

marco.r
21-05-2007, 13:56
Salve ragazzi

facendo una cosa del genere

template <class T> T *cercaPerId(unsigned ident, set<T *> &tabella)
{
set <T *>::iterator it;
.....
}

il compilatore mi dice che vuole il punto e virgola prima di it, che è un modo come un altro per dirmi non so che dirti ma a me questa cosa non mi va bene.

Quello che sta cercando di dire il compilatore, e' che non riesce a capire cosa sia set<T*>::iterator. Nel caso generale e' un nome di tipo, ma nulla vieta di ridefinire iterator in una specializzazione come valore:

#include <set>
#include <iostream>


struct Foo
{
int foo;
};

namespace std
{
template <>
class set<Foo>
{
public:
static int iterator;
};
}

int std::set<Foo>::iterator = 10;

using namespace std;

int main()
{
set<Foo>::iterator = 5;
cout << set<Foo>::iterator << endl;
}

:eek:
Nel tuo caso, devi dire esplicitamente al compilatore che si tratta del nome di un tipo, per cui il tuo codice va modificato come segue

template <class T> T *cercaPerId(unsigned ident, set<T *> &tabella)
{
typename set <T *>::iterator it;
.....
}

Vecchia Spugna
21-05-2007, 20:05
ti ringrazio tantissimo. non ci ho capito molto ma quantomeno funziona :D