麻烦非模板类的模板构造函数

时间:2014-07-23 19:41:44

标签: c++ templates c++11

在搜索另一个question的答案时,我开发了一个辅助类,可以使用任何类型的整数容器。具体来说,我的类会根据某些标准查找容器值。为了使用不同类型的容器,我的类显然不需要在容器本身上操作,而是在它们的迭代器上操作。我不需要在我的类中的任何地方引用容器,我只使用迭代器而只在类构造函数中使用。

//头文件。

 class MyLookup {
    public: 
    template<typename ForwardIt>   // Forward iterator though sequence of integers
    MyLookup(ForwardIt begin, ForwardIt end)
    ...
 }

//实施文件

 template<typename ForwardIt>
 MyLookup::MyLookup(ForwardIt begin, ForwardIt end) {
 ...
 }

//使用文件

std::vector<int> foo;
...
MyLookup lookup(foo.begin(), foo.end());

使用CLang时,初始编译器传递成功但后来我遇到链接器错误:

架构x86_64的未定义符号:   &#34; MyLookup :: MyLookup&gt;(std :: __ 1 :: __ wrap_iter,std :: __ 1 :: __ wrap_iter)&#34;,引自:...

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您需要在头文件中提供模板的定义,而不是他们自己的源文件。这是因为模板实际上是类定义的模板 - 它们本身不是类定义。