1

以下はコンパイルに失敗します(とにかく、Linux上のgcc 4.2.1で):

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:関数内'void templated()':

foo.c:22:エラー:予期される `; ' 「バー」の前</p>

通常、型が宣言されていないときにこれが表示されますが、私が知る限り、Foo <T> :: FooTypeはtemplated()内で完全に有効である必要があります。

4

1 に答える 1

2

使用typename

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

typenameが必要な理由については、これを参照してください。

于 2010-03-10T16:38:45.580 に答える