Newsgroup: it.comp.lang.c++
Titolo: Due domande sui template

::iterator' is implicitly a typename
ed ecco la riga incriminata:
m_map::iterator i = matrixes.find(operand1);
Spero che mi possiate aiutare, dall'alto della vostra esperienza! ;)
-- 
          Andrea Spadaccini a.k.a. Lupino         
                    - Catania -                   
Linux Registered User #313388 - Mandrake Linux 9.1


 typename m_map::iterator i = matrixes.find(operand1);
La questione č stata discussa piů volte in questo gnusgruppo. GIYF.
Max

 GIYF.
su questo non posso darti torto!
grazie mille comunque per l'aiuto! ciao!
-- 
    Andrea Spadaccini a.k.a. Lupino   
              - Catania -             
Now playing: no artist - AudioTrack 02

 quel typedef.
bé, io ci sto provando ma non ci riesco.
magari è un errore troppo stupido, ma non riesco a vederlo!
ecco l'errore
[andrea@iridium algebra]$ g++ main.cpp -o matrix 
In file included from main.cpp:4:
parser.h:30: data member `matrixes' cannot be a member template
parser.h: In member function `void parser::parse2(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, matrix<T>*) [with T = int]':
[snip]
ed il codice
[snip]
template <class T>
class m_map {
    public:
        m_map() {};
        map<char, matrix<T>, less<char> > mt;
};
class parser {
    public:
        parser() {};
        template<typename T>
        void parse2(const string, matrix<T>*);
    private:
        vector<string> tokenize(string);
        template<typename T>
        m_map<T> matrixes;
};
[snip]
che sto combinando? dice che n_map<T> non può essere membro.. ma perché?
TIA
-- 
      Andrea Spadaccini a.k.a. Lupino     
                - Catania -               
Now playing: T42 feat. Sharp - Set me free

 m_map::iterator i = matrixes.find(operand1);
Poiche' iterator e' un nome che dipende dal parametro del template
(potrebbe siginificare cose diverse in specializzazioni diverse) e'
necessario prefiggere la dichiarazione con la keyword 'typename':
typename m_map::iterator i = matrixes.find(operand1);
Ciao,
Nicola

 che sto combinando? dice che n_map<T> non può essere membro.. ma perché?
Perché ti sei di nuovo inventato un costrutto che in C++ non esiste: i
membri template (che difficilmente esisteranno mai, peraltro).
Quando parlavo di incapsulare il typedef in una piccola classe, mi riferivo
esattamente a quello che ha suggerito Nicola nel suo messaggio. (Ehm, sarei
curioso di sapere, a questo punto, come intendevi riferirti a 'matrixes'
all'interno di 'parse2'.)
Se hai bisogno di una map<> che sopravviva tra le varie chiamate a 'parse2',
devi instanziarla appositamente e passarla come parametro. Potresti anche
creare una classe template che abbia tale map<> come membro e, magari,
definire 'parse2' in questa classe, anziché in 'parser'.
Max

 B<int>::m_map m;
Grazie mille per la risposta, molto puntuale ed illuminante.
Il codice si stava attorcigliando un po', quindi, per agevolarmi, ho reso
template l'intera classe, semplificandomi un po' di cose!
Grazie ancora, e complimenti!
Seguire questo NG č molto piacevole ed istruttivo.


 'matrixes' all'interno di 'parse2'.)
lasciamo perdere..
piuttosto, ho visto il preciso messaggio di Nicola, vado a modificare la
classe!
grazie mille per la disponibilità!
-- 
       Andrea Spadaccini a.k.a. Lupino       
                 - Catania -                 
Now playing: Gemelli_Diversi - Chi sei_adesso