无法匹配模板类中模板函数的函数声明

时间:2015-12-02 14:37:48

标签: c++ c++11

考虑

template<class Y> struct foo
{
    template <class ForwardIt>
    foo(ForwardIt first, ForwardIt last);
};

为了实现构造函数,我写了

template<class Y, class ForwardIt> foo(ForwardIt first, ForwardIt last)
{
    // ToDo - code here
}

但是这会产生编译错误,导致它无法将该定义与声明匹配。

我做错了什么?我正在使用C ++ 11编译器。

2 个答案:

答案 0 :(得分:5)

您的代码中存在两个问题。首先,你在类的主体之外的函数定义中缺少类的名称,这基本上意味着你要声明一个与类或其成员无关的独立函数函数(在这种情况下,它是非法的,因为你的函数没有返回类型,因此不能是一个独立的函数)。

其次,必须对类模板参数和成员函数模板参数使用不同的template声明。

你需要:

template<class Y>
template<class ForwardIt>
foo<Y>::foo(ForwardIt first, ForwardIt last)
{
    // ToDo - code here
}

答案 1 :(得分:1)

template<class Y>
template<class ForwardIt>
foo<Y>::foo(ForwardIt first, ForwardIt last)
{
}

是定义它的正确方法。