实例化模板类时出现链接器错误

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&lt;T&gt; 等模板类必须(通常)在头文件 (.h) 中实现。

因此,您需要将templateclass.c的内容移动到templateClass.h并删除templateclass.c

更多信息请参见Why can templates only be implemented in the header file?。

【讨论】:

但是当我尝试打印 array 的元素时出现另一个错误。错误 C2275: 'T' : 非法将此类型用作 (int i =0; i 的表达式 @Maddyfire:乐于助人。你的下一个问题是Ttypearrvariable。您可能指的是for (int i = 0; i&lt; MAX; i++) std::cout &lt;&lt; "\n" &lt;&lt; arr[i]; (或类似的)。 @Maddyfire:好消息。请考虑marking this answer as 'accepted'。

以上是关于实例化模板类时出现链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

两次实例化 QStyledItemDelegate 的子类时出现“Python 已停止工作”错误

实例化记录中的 Svg msg 元素列表时出现奇怪的榆树类型错误

将模型从 tensorflow 转换为 Coreml (4.0) 时出现实例归一化错误

以编程方式(但不是以声明方式)实例化小部件时出现 Dojo 重复 ID 错误

无法强制实例化专用模板

Android错误,无法实例化服务...接口无法实例化