0

以下のコードはコンパイルされません。

//in definition
typedef double value_type;

//in implementation
template <typename T>
typename value_type sequence<T>::current( )
{
    return data[used-1];
}

「typename value_type」を「double」に置き換えると、コードがコンパイルされ、期待どおりに動作します。value_type を double と同等に割り当てているのに、double の代わりに typename value_type を使用できないのはなぜですか?

4

1 に答える 1

3

「定義内」は「クラステンプレートの定義内sequence<>」を意味し、「実装内」は「クラステンプレートのメンバー関数の定義内current()sequence<>」を意味すると仮定すると、次のように記述する必要があります。

template <typename T>
typename sequence<T>::value_type sequence<T>::current( )
//       ^^^^^^^^^^^^^
{
    return data[used-1];
}

また、明示的な特殊化を使用していない限り、クラス テンプレートのメンバー関数の定義は、クラス テンプレートの定義を含む同じヘッダーに配置する必要があることに注意してください。

于 2013-06-10T19:16:01.437 に答える