fehlt; vor Bezeichner während VC6 Code in VC9 Kompilieren
Frage
Der folgende Code kompiliert in VC6 in Ordnung, aber wenn ich das gleiche Projekt in VS2008 kompilieren gibt es die folgenden Fehler Fehler C2146: Syntaxfehler: fehlen; vor Bezeichner '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
}
Irgendwelche Ideen von dem, was hier falsch ist? Jemand mit Erfahrung C ++ Code aus VC6 zu VC2005 / 2008 möglicherweise in der Lage zu helfen.
bei der MigrationLösung
Sie müssen möglicherweise 'Typname' einfügen, der Compiler PRIMARY_MAP sagen :: iterator ist, in allen Fällen einen Typ.
z.
class GCache
{
private:
typedef map<pKey, Data, pCompare> PRIMARY_MAP;
PRIMARY_MAP pMap;
typename PRIMARY_MAP::iterator m_pItr;
//Code truncated
}
Andere Tipps
Es sollte typename PRIMARY_MAP::iterator m_pItr;
werden. Ansonsten Compiler denkt, dass PRIMARY_MAP :: iterator ein statisches Objekt ist und nicht in der Lage sein, es als eine Art zu erkennen. So haben Sie einen Hinweis an den Compiler zu geben, was anzeigt, dass es eine Art ist und kein statisches Objekt.
Sie können Opfer zu einer gemeinsamen Vorlage Problem zu fallen:
class cKey = int, class cCompare = less<cKey>>
sollte:
class cKey = int, class cCompare = less<cKey> >
Beachten Sie den Raum zwischen den llast zwei spitzen Klammern.