考虑
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 编译器。
最佳答案
您的代码中有两个问题。首先,你在类的主体之外的函数定义中遗漏了类的名称,这基本上意味着你正在声明一个与类或其成员函数无关的独立函数(在这种情况下它是非法的因为您的函数没有返回类型,因此不能是独立函数)。
其次,您必须为您的类模板参数和成员函数模板参数使用不同的模板
声明。
你需要:
template<class Y>
template<class ForwardIt>
foo<Y>::foo(ForwardIt first, ForwardIt last)
{
// ToDo - code here
}
关于c++ - 无法匹配模板类中模板函数的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045422/