Bonjour,

si quelqu'un pouvait m'éclairer vis à vis de ce code de template :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
template<typename T, class C>
class MTest
{
    public:
        MTest() {}
        ~MTest()    {}
 
        C*      find(T t)
        {
            std::map<T, C*>::iterator it;
 
            if ((it = mymap.find(t)) == mymap.end())
                return (0);
 
            return (it->second);
        }
 
    protected:
        std::map<T, C*>     mymap;
};
Cette version compilée simplement avec g++ sans option me renvoie :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Test.hh:18: error: expected ‘;’ before ‘it’
Test.hh:20: error: ‘it’ was not declared in this scope
Test.hh:23: error: ‘it’ was not declared in this scope
Et quand je réécris la méthode find de cette manière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
        C*      find(T t)
        {
            if ((mymap.find(t)) == mymap.end())
                return (0);
 
            return (mymap.find(t)->second);
        }
=> dans ce cas je n'ai pas d'erreur, un problème vis à vis de la déclaration de l'iterator ? quelqu'un a une idée ?

=> g++ (Debian 4.4.5-8) 4.4.5