模板函数 f 要求其模板参数类型 T 具有名为 Inner 的内部类。
在 f 内部, T :: Inner 将被实例化。
首先尝试。
//
// "error: need 'typename' before 'T:: Inner' because 'T' is a dependent scope"
//
template <typename T>
void f( void )
{
T::Inner i;
}
我知道了,所以这是第二次尝试,我没有弄错:
/// "error: expected ';' before 'i'
template<typename T>
void f ( void )
{
typename T::Inner I;
I i;
}
为什么?
根据我的理解: 内部被声明为类型。 该模板尚未实例化。 是否存在类型 Inner 首先变得相关 在实例化 - 不是定义。我哪里错了?
答案 0 :(得分:2)
我想你想做
typename T::Inner i;
或
typedef typename T::Inner I;
I i;
而你在问题中的内容实际上是将I
声明为变量,然后就在你之后尝试使用它,好像它是一个类型。