Question

Le code suivant compile bien dans VC6 mais quand je compilez le même projet en VS2008 il donne l'erreur suivante erreur C2146: erreur de syntaxe: manquant « ; » avant identificateur 'm_pItr'

template <class pKey, class Data, class pCompare, 
          class hKey = int, class hCompare = less<hKey>,
          class sKey = int, class sCompare = less<sKey>,
          class tKey = int, class tCompare = less<tKey>,
          class cKey = int, class cCompare = less<cKey>>

class  GCache
{
    private:

        typedef map<pKey, Data, pCompare> PRIMARY_MAP;
        PRIMARY_MAP pMap;

        PRIMARY_MAP::iterator m_pItr; //error here

//Code truncated
}

Toutes les idées de ce qui ne va pas ici? Quelqu'un ayant une expérience dans la migration du code C ++ de VC6 à VC2005 / 2008 pourrait être en mesure d'aider.

Était-ce utile?

La solution

Vous devrez peut-être insérer 'typename', de dire le compilateur PRIMARY_MAP :: iterator est, dans tous les cas, un type.

par exemple.

class  GCache
{
    private:

        typedef map<pKey, Data, pCompare> PRIMARY_MAP;
        PRIMARY_MAP pMap;

        typename PRIMARY_MAP::iterator m_pItr;

//Code truncated
}

Autres conseils

Il doit être typename PRIMARY_MAP::iterator m_pItr;. Sinon compilateur pense que PRIMARY_MAP :: iterator est un objet statique et ne sera pas en mesure de le reconnaître comme un type. Donc, vous devez donner une indication pour le compilateur indiquant qu'il est un type et non un objet statique.

Vous pouvez être victime d'un problème de modèle commun:

class cKey = int, class cCompare = less<cKey>>

devrait être:

class cKey = int, class cCompare = less<cKey> >

Notez l'espace entre les deux équerres llast.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top