在搜索另一个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;,引自:...
知道我做错了什么吗?
答案 0 :(得分:0)
您需要在头文件中提供模板的定义,而不是他们自己的源文件。这是因为模板实际上是类定义的模板 - 它们本身不是类定义。