无法从头文件识别通用函数?

时间:2019-10-13 15:14:04

标签: c++ generics const

我正在尝试将一些功能拆分到一个单独的.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)

知道我在做什么错吗?

0 个答案:

没有答案