我有以下代码(基于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>
),一切正常。