实例化模板类时出现链接器错误
Posted
技术标签:
【中文标题】实例化模板类时出现链接器错误【英文标题】:Getting Linker error while instantiating a template class 【发布时间】:2013-10-13 03:41:52 【问题描述】:在main
中实例化class
时,我遇到了这两个错误:
error LNK2019: unresolved external symbol "public: __thiscall templateClass<int>::templateClass<int>(void)" (??0?$templateClass@H@@QAE@XZ) referenced in function _wmain
error LNK2019: unresolved external symbol "public: __thiscall templateClass<int>::~templateClass<int>(void)" (??1?$templateClass@H@@QAE@XZ) referenced in function _wmain
代码
templateClass.h
#pragma once
#define MAX 10
template<class T>
class templateClass
private:
T arr[MAX];
int size;
public:
templateClass(void);
void initArrayWithZero();
void pushElementIntoArray(T element );
void printArray();
~templateClass(void);
;
templateclass.c
#include "templateClass.h"
template <class T>
templateClass<T>::templateClass(void)
size = 0;
template <class T>
templateClass<T>::~templateClass(void)
template <class T>
void templateClass<T>::pushElementIntoArray(T element )
if(size<MAX)
T[size++] = element;
else
//Give error code
template <class T>
void templateClass<T>::initArrayWithZero()
for(i= 0; i<MAX; i++)
T[i] = 0;
template <class T>
void templateClass<T>::printArray()
for( int i =0; i<MAX; i++)
cout<<"\n"T[i];
Main.cpp
#include "stdafx.h"
#include "templateClass.h"
int _tmain(int argc, _TCHAR* argv[])
templateClass<int> intarray;
return 0;
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:templateClass<T>
等模板类必须(通常)在头文件 (.h
) 中实现。
因此,您需要将templateclass.c
的内容移动到templateClass.h
并删除templateclass.c
。
更多信息请参见Why can templates only be implemented in the header file?。
【讨论】:
但是当我尝试打印 array 的元素时出现另一个错误。错误 C2275: 'T' : 非法将此类型用作 (int i =0; iT
是type 而arr
是variable。您可能指的是for (int i = 0; i< MAX; i++) std::cout << "\n" << arr[i];
(或类似的)。
@Maddyfire:好消息。请考虑marking this answer as 'accepted'。以上是关于实例化模板类时出现链接器错误的主要内容,如果未能解决你的问题,请参考以下文章
两次实例化 QStyledItemDelegate 的子类时出现“Python 已停止工作”错误
实例化记录中的 Svg msg 元素列表时出现奇怪的榆树类型错误
将模型从 tensorflow 转换为 Coreml (4.0) 时出现实例归一化错误