我正在尝试一些模板方面的东西,而我想做的第一件事就是将模板化的类分为.hpp和.cpp文件。我发现所有示例都包括
template class Foo<int>;
位于.cpp文件的底部,但是我无法使用它。这是一个最小的示例:
#pragma once
template<typename T>
class Foo
{
public:
Foo(T t);
private:
T _t;
};
#include "foo.h"
template<typename T>
Foo<T>::Foo(T t) : _t(t) {}
template class Foo<int>; // explicit instantiation
// main.cpp
#include "foo.hpp"
int main()
{
Foo<int> a(5);
}
这不能编译,但是会给出错误undefined reference to 'Foo<int>::Foo(int)'
$ g++ main.cpp -o main
C:\msys64\tmp\cc4EtmTs.o:main.cpp:(.text+0x1a): undefined reference to `Foo<int>::Foo(int)'
collect2.exe: error: ld returned 1 exit status
我正在使用带有gcc 8.3.0的MSYS2(Rev2,由MSYS2项目构建)。知道我在做什么错吗?