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

标签 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 编译器。

最佳答案

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

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

你需要:

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

关于c++ - 无法匹配模板类中模板函数的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045422/

相关文章:

c++ - 如何在 OpenCV 2.3.1 中使用轮廓?

c++ - 销毁 vector 的 vector

C++14 在类构造函数初始化列表中初始化继承成员

c++ - Qt - QPushButton 快捷方式未触发

c++ - 确定没有其虚拟表指针的对象的大小

c++ - std::invoke 没有匹配的重载函数发现 VS 2015 中给出的错误

c++ - 使用仅使用一次的变量调用的复制构造函数。这可能是通过调用 move 构造函数来优化编译器的情况吗?

c++ - std::string 在 C++11 中是否总是以空值结尾?

c++ - 我可以从 std::vector 中 std::move() 一个元素吗?

c++ - 为什么在初始化和调整对象 vector 大小时调用析构函数?