Domanda

Di seguito fallisce la compilazione (con gcc 4.2.1 su Linux, comunque):

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;
}

Il problema è con questa linea:

   Foo< T >::FooType bar = 0;

... e il compilatore fa questa denuncia:

  

foo.c: In funzione ‘vuoto su modelli ()’:

     

foo.c: 22: Errore: atteso `;' prima di ‘bar’

Normalmente si vede questo, quando un tipo non è stato dichiarato, ma per quanto ne so, Foo :: FooType dovrebbe essere perfettamente valido all'interno su modelli ().

È stato utile?

Soluzione

uso typename:

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

questo del motivo per cui è necessario typename.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top