مفقود ؛ قبل المعرف أثناء تجميع رمز VC6 في VC9

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
}

أي أفكار ما هو الخطأ هنا؟ قد يكون شخص ما مع خبرة في الترحيل C ++ كود من VC6 إلى VC2005 / 2008 قادرا على المساعدة.

هل كانت مفيدة؟

المحلول

قد تحتاج إلى إدراج "TypeName"، لإخبار برنامج التحويل البريمي للمترجم :: ITERATOR، في جميع الحالات، نوع.

على سبيل المثال

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; وبعد يفكر مترجم خلاف ذلك في أن Symer_Map :: ITERATOR هو كائن ثابت ولن يكون قادرا على التعرف عليه كنوع. لذلك عليك أن تعطي تلميح للمترجم الذي يشير إلى أنه نوع وليس كائن ثابت.

قد تكون سقوط ضحية مشكلة قالب شائعة:

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

يجب ان يكون:

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

لاحظ المسافة بين أقواس زاوية LLAST.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top