Bonjour,

je me suis fait une petite classe Map qui hérite de std::map et j'ai un souci de compilation selon la version de gcc :

Voici le début de ma classe :
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
 
template <typename Key,typename Value> class Map : public std::map<Key,Value>
    {
    public:
        using typename std::map<Key,Value>::const_iterator ;
        using std::map<Key,Value>::operator [] ;
        using std::map<Key,Value>::insert ;
        using std::map<Key,Value>::begin ;
        using std::map<Key,Value>::find ;
        using std::map<Key,Value>::end ;
 
        Map & add ( const Map & other )
            {
            for ( const_iterator i = other.begin() ; i != other.end() ; ++i )  // <--- ligne de l'erreur
                (*this)[i->first] = i->second ;
            return *this ;
            }
avec la version de gcc 5.3.1, ça compile sans problème et sans warning.
Avec la version 4.4.7, j'ai cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
In member function "common::Map<Key, Value>& common::Map<Key, Value>::add(const common::Map<Key, Value>&)":
error: expected ";" before "i"
error: "i" was not declared in this scope
Et là, mes maigres connaissances de c++ trouvent leur limite...
Y a-t-il moyen de trouver une syntaxe équivalente qui compile avec les 2 versions de gcc ?

Merci d'avance !