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

Error when initializing function with typename after typedef in templated class

本文关键字:typename 初始化 函数 出错 之后 typedef      更新时间:2023-10-16

下面的代码无法编译:

//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?

假设定义中的是指sequence<>类模板定义中的,实现中的是指sequence<>类模板current()成员函数定义中的,那么你要写的是:

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

还要记住,除非使用显式特化,否则类模板的成员函数的定义应该放在包含类模板定义的同一个头文件中。