失踪 ; 在VC9中编译VC6代码时的标识符之前

bob*_*lex 0 c++ migration visual-c++-6

下面的代码在VC6中编译得很好但是当我在VS2008中编译同一个项目时,它会给出以下错误错误C2146:语法错误:缺少';' 在标识符'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
}
Run Code Online (Sandbox Code Playgroud)

这里有什么不妥的想法?有能力将C++代码从VC6迁移到VC2005/2008的人可能会有所帮助.

Tob*_*obi 6

您可能需要插入'typename',以告诉编译器PRIMARY_MAP :: iterator在所有情况下都是一个类型.

例如

class  GCache
{
    private:

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

        typename PRIMARY_MAP::iterator m_pItr;

//Code truncated
}
Run Code Online (Sandbox Code Playgroud)