我正在尝试将一些功能拆分到一个单独的.cpp文件中,以清理main.cpp。
有问题的功能是这样的:
toolbox.cpp:
template<class ContainerPointer, class T>
bool contains(const ContainerPointer container, T val) {
return (find(container->begin(), container->end(), val) != container->end());
}
我已经在头文件中声明了它,如下所示:
工具箱.hh:
template<typename ContainerPointer, class T>
bool contains(const ContainerPointer container, T val);
这是它在main.cpp中的用法:
...
for (const pair<string, vector<string>>& kvp : myMap) {
if (contains(&kvp.second, name)) { // Error here
...
}
}
...
在编译时,在指定的行出现错误:
error: undefined reference to `bool contains<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
以下任何一项均可修复错误:
如果我放弃了contains
的模板并将参数转换为特定类型。
如果我复制,将contains
函数和模板粘贴到我的main.cpp中。
如果我在main.cpp中编辑foreach语句,那么它就是(pair<string, vector<string>> kvp : myMap)
。
如果我在main.cpp中编辑foreach语句,那么它就是`(pair> && kvp:myMap)
知道我在做什么错吗?