不足しています。識別子の前に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
}
ここで間違っているものの任意のアイデア? VC2005 / 2008 VC6からC ++コードの移行の経験を持つ誰かが助けることができるかもしれない。
解決
あなたは、すべてのケースでは、コンパイラPRIMARY_MAP ::イテレータがある伝えるために、「型名」を挿入するタイプが必要な場合があります。
例えばます。
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;
する必要があります。そうしないと、コンパイラはPRIMARY_MAP ::イテレータは静的オブジェクトで、タイプとしてそれを認識することはできませんと思います。だから、あなたはそれがタイプではなく、静的なオブジェクトであることを示すコンパイラにヒントを与える必要があります。
あなたは、共通のテンプレートの問題の犠牲に落ちることがあります:
class cKey = int, class cCompare = less<cKey>>
である必要があります:
class cKey = int, class cCompare = less<cKey> >
llast 2つのアングルブラケットとの間の空間に注意してください。
所属していません StackOverflow