源文件中的模板化类的显式实例不起作用

时间:2019-03-08 14:48:14

标签: c++ templates

我正在尝试一些模板方面的东西,而我想做的第一件事就是将模板化的类分为.hpp和.cpp文件。我发现所有示例都包括

template class Foo<int>;

位于.cpp文件的底部,但是我无法使用它。这是一个最小的示例:

foo.hpp

#pragma once

template<typename T>
class Foo
{
public:
    Foo(T t);

private:
    T _t;
};

foo.cpp

#include "foo.h"

template<typename T>
Foo<T>::Foo(T t) : _t(t) {}

template class Foo<int>; // explicit instantiation

main.cpp

// 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项目构建)。知道我在做什么错吗?

0 个答案:

没有答案