잃어버린 ; VC9에서 VC6 코드를 컴파일하는 동안 식별자 이전

StackOverflow https://stackoverflow.com/questions/955162

  •  11-09-2019
  •  | 
  •  

문제

다음 코드는 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
}

여기에 무엇이 잘못되었는지에 대한 아이디어가 있습니까? VC6에서 VC2005/2008으로 C ++ 코드를 마이그레이션 한 경험이있는 사람이 도움이 될 수 있습니다.

도움이 되었습니까?

해결책

컴파일러 Primary_Map :: iterator를 알려주기 위해 'typeName'을 삽입해야 할 수도 있습니다.

예를 들어

class  GCache
{
    private:

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

        typename PRIMARY_MAP::iterator m_pItr;

//Code truncated
}

다른 팁

그것은해야한다 typename PRIMARY_MAP::iterator m_pItr; . 그렇지 않으면 Compiler는 Primary_Map :: iterator가 정적 객체이며이를 유형으로 인식 할 수 없다고 생각합니다. 따라서 컴파일러가 정적 객체가 아니라 유형임을 나타내는 힌트를 제공해야합니다.

일반적인 템플릿 문제에 대한 희생자가 될 수 있습니다.

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

해야한다:

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

llast 두 각도 브래킷 사이의 공간에 주목하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top