This question already has answers here:
Where and why do I have to put the “template” and “typename” keywords?
(6个答案)
5年前关闭。
我正在尝试创建一个可以接受任何类型的
我收到此错误:
有没有办法做到这一点?
(6个答案)
5年前关闭。
我正在尝试创建一个可以接受任何类型的
list
或vector
的函数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参数,直到实例化模板后才知道。因此,在模板定义中,除非您告诉编译器,否则编译器不会知道它是类型名称。