在模板化类中的typedef之后使用typename初始化函数时出错

时间:2013-06-10 19:14:58

标签: c++

以下代码无法编译:

//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”会导致代码按预期编译和工作。为什么我不能使用typename value_type代替double,如果我已经将value_type指定为等于double?

1 个答案:

答案 0 :(得分:3)

假设“ in definition ”表示“sequence<>类模板”的定义中,“ in implementation “在current()类模板的sequence<>成员函数的定义中”表示“”,那么您必须写的是:

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

另请注意,除非您使用显式特化,否则类模板的成员函数的定义应放在包含类模板定义的同一标头中。