Pergunta

O seguinte falha em compilar (com o GCC 4.2.1 no Linux, de qualquer maneira):

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

O problema é com esta linha:

   Foo< T >::FooType bar = 0;

... e o compilador faz esta reclamação:

foo.c: em função 'void modated ()':

foo.c: 22: erro: esperado `; ' antes de 'bar'

Normalmente, se vê isso quando um tipo não foi declarado, mas até onde eu sei, foo <t> :: Footype deve ser perfeitamente válido dentro de modificado ().

Foi útil?

Solução

usar typename:

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

Ver isto Pelo por que o tipo de tipo é necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top