微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我尝试在模板化函数中使用迭代器时,“在 'typename' 之后需要一个限定名称”

如何解决当我尝试在模板化函数中使用迭代器时,“在 '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 举报,一经查实,本站将立刻删除。