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,为什么我不能使用 typename value_type 代替 double?

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 回答