我在调用模板类时遇到问题.我声明了一个新的类型名称Array,它是一个模板;
在.hpp文件中:
template <typename T>
class Array
{
public:
Array();
};
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中:
template <typename T>
Array<T>::Array()
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
主要:
Array<int> arr;
Run Code Online (Sandbox Code Playgroud)
我得到了Linkage错误:未解析的外部符号到ctor.
任何的想法?
首先,这不是一个重复的问题,因为1)这是一个链接器问题,编译器成功通过,因为我已经显式实例化了。2)这不是关于模板类,而是模板成员函数,3)我对代码结构有一些限制,所以一些现有的技巧不适用。我在这里搜索了我的标题,前几个线程(40832391、20330521、25320619、12848876、36940394)都是关于模板类,而不是模板成员函数。其他一些线程实际上正在谈论实例化失败,因此实际上是编译器问题,但我已经尝试过显式实例化并且编译已成功通过,重复一下。所以我希望你能抑制住把我的问题作为重复问题来结束的诱惑,这是我的帖子。
环境:
来源:
有两个项目:
1) DllProject,构建为 dll,包含两个源:Dll.h 和 Dll.cpp。
DLL.h:
#pragma once
#ifdef _WINDLL
#define API_TYPE __declspec(dllexport)
#else
#define API_TYPE __declspec(dllimport)
#endif
class API_TYPE AClass {
public:
template <class T> void Func(T& data);
template <class T> void CallFunc(T& data) {
Func<T>(data);
}
};
Run Code Online (Sandbox Code Playgroud)
DLL.cpp:
#include "Dll.h"
template <class T> void AClass::Func(T& data) {
data++;
}
template void AClass::Func<float>(float&); //attempt to …Run Code Online (Sandbox Code Playgroud)