【发布时间】:2020-09-11 11:41:10
【问题描述】:
在“header.h”中
template <typename T> struct Foo
{
void func();
};
在“Source2.cpp”中
#include "Header.h"
#include <iostream>
template <typename T>
void Foo<T>::func()
{
T a = 5;
std::cout << a;;
}
在“Source1.cpp”中
#include "Header.h"
template struct Foo<int>;
int main()
{
Foo<int> b;
b.func();
}
链接器错误:函数 _main 中引用的 LNK2019 未解析的外部符号“public: void __thiscall Foo::func(void)”(?func@?$Foo@H@@QAEXXZ)
这不是显式实例化类的正确方法吗?
【问题讨论】:
-
你编译正确吗?
-
func的定义必须在头文件中,而不仅仅是它的声明
-
@bruno 我认为显式实例化是一种可以用来在头文件中没有定义的方法
-
您需要将显式实例化放在
Source2.cpp中的方法实现之后。 -
@cigien 我明白了,为什么它不能按照我的方式工作?
标签: c++ template-classes