سؤال

فشل ما يلي في ترجمة (مع GCC 4.2.1 على نظام Linux، على أي حال):

template< typename T >
class Foo
{
public:
   typedef int FooType;
};

void
ordinary()
{
   Foo< int >::FooType bar = 0;
}

template< typename T >
void
templated()
{
   Foo< T >::FooType bar = T( 0 );
}

int main( int argc, char **argv )
{
   return 0;
}

المشكلة هي مع هذا الخط:

   Foo< T >::FooType bar = 0;

... والمترجم يجعل هذه الشكوى:

foo.c: في الوظيفة "الفراغ القالب ()":

foo.c: 22: خطأ: المتوقع "؛" قبل "بار"

عادة ما يرى المرء هذا عندما لم يتم الإعلان عن نوع، ولكن بقدر ما أستطيع أن أقول، يجب أن يكون foo <t>: footype صالحا تماما داخل القالب ().

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

المحلول

استعمال typename:

  typename Foo< T >::FooType bar = 0;

يرى هذه لماذا هناك حاجة إلى اسم TypEName.

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