使用std :: vector作为模板参数的静态方法的未定义参考错误

时间:2019-06-10 05:00:38

标签: c++ templates stdvector

我有以下代码(基于this答案):

#include <iostream>
#include <vector>

class Debug
{
public:
    template <typename T, typename A>
    static void printVector(const std::vector<T,A>&, const std::string& = "Vector:");
};

template <typename T, typename A>
void Debug::printVector(const std::vector<T,A>& v, const std::string& message)
{
    std::cout<<message<<std::endl;
    for(auto item : v)
    {
        std::cout<<item<<std::endl;
    }
}

int main() {
    std::vector<std::string> vec {"a","b","c"};
    Debug::printVector(vec);
    return 0;
}

online compiler中效果很好。但是,当我尝试在Ubuntu上使用GCC 4.8进行编译时,它说:

error: undefined reference to `void Debug::printVector<std::string, std::allocator<std::string> >(std::vector<std::string, std::allocator<std::string> > const&, std::string const&)'
error: collect2: error: ld returned 1 exit status

没有模板(仅使用std::vector<std::string>),一切正常。

0 个答案:

没有答案