从函数返回 ::迭代器不会编译

Returning ::iterator from function does not compile

本文关键字:编译 迭代器 返回 函数      更新时间:2023-10-16

以下存储库编译良好:

#include <tuple>
#include <vector>
class Foo
{
public:
    typedef std::tuple<int, int> foo_type;
    std::vector<foo_type>::iterator Find() {
        return Listeners.begin();
    }
    std::vector<foo_type> Listeners;
};
int main() 
{
    Foo foo;
    auto i = foo.Find();
}

但是当我在 P、Q 上模板化元组时,如以下存储库所示,出现此错误:

语法错误:标识符"查找"之前缺少";"

#include <tuple>
#include <vector>
template<typename P, typename Q>
class Foo
{
public:
    typedef std::tuple<P, Q> foo_type;
    std::vector<foo_type>::iterator Find() {
        return Listeners.begin();
    }
    std::vector<foo_type> Listeners;
};
int main()
{
    Foo<int, int> foo;
    auto i = foo.Find();
}

你在这里缺少一个typename

typename std::vector<foo_type>::iterator Find() {
^^^^^^^^
    return Listeners.begin();
}

有关更详细的说明,请参阅我必须在哪里以及为什么必须放置"模板"和"类型名"关键字?