잃어버린 ; VC9에서 VC6 코드를 컴파일하는 동안 식별자 이전
문제
다음 코드는 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 두 각도 브래킷 사이의 공간에 주목하십시오.
제휴하지 않습니다 StackOverflow