如何解决当我尝试在模板化函数中使用迭代器时,“在 'typename' 之后需要一个限定名称”
我想创建一个函数,它以容器 T(可以是向量、映射、列表...)作为模板,以 T 和 Int 作为参数,在这个函数中,我们假设 T 是一个容器的 int,我想返回 int 在容器中的第一次出现。这是函数:
template <class T> int & easyfind(T container,int n)
{
typename T<int>::iterator it;
for (it = container.begin(); it != container.end(); it++)
if (*it == n)
return (*it);
throw (NotFoundException());
}
但是编译器说“期望在 'typename' 之后有一个限定名称”,当我用 typename
替换 class
时,编译器说“非模板类 'T' 的显式特化”,我怎样才能让它工作?
解决方法
T
是一种类型,而不是模板。你需要
typename T::iterator it;
访问其 iterator
类型成员。
你看到类似代码的原因
std::vector<int>::iterator
是因为std::vector
是模板名,需要指定模板参数。在您的情况下,T
已经是模板的实例,因此无需指定参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。