以下代码无法编译:
//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?
答案 0 :(得分:3)
假设“ in definition ”表示“在sequence<>
类模板”的定义中,“ in implementation “在current()
类模板的sequence<>
成员函数的定义中”表示“”,那么您必须写的是:
template <typename T>
typename sequence<T>::value_type sequence<T>::current( )
// ^^^^^^^^^^^^^
{
return data[used-1];
}
另请注意,除非您使用显式特化,否则类模板的成员函数的定义应放在包含类模板定义的同一标头中。