This question already has answers here:
Where and why do I have to put the “template” and “typename” keywords?
                                
                                    (6个答案)
                                
                        
                                5年前关闭。
            
                    
我正在尝试创建一个可以接受任何类型的listvector的函数

template <typename T>
void printSomething ( const T& v )
{
    for( T::iterator i = v.begin(); i != v.end(); ++i )
    {
        std::cout << *i << std::endl;
    }
}


我收到此错误:

error: need ‘typename’ before ‘T:: iterator’ because ‘T’ is a dependent scope
  for( T::iterator i = v.begin(); i != v.end(); ++i )


有没有办法做到这一点?

最佳答案

有没有办法做到这一点?


是的,完全按照错误消息的说明进行操作。

for( typename T::iterator i = v.begin(); i != v.end(); ++i )
     ^^^^^^^^


iterator的含义取决于template参数,直到实例化模板后才知道。因此,在模板定义中,除非您告诉编译器,否则编译器不会知道它是类型名称。

10-07 16:33
查看更多