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

Getting Linker error while instantiating a template class

本文关键字:链接 错误 实例化      更新时间:2023-10-16

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;
}

我该如何解决这个问题?

模板类如templateClass<T>必须(通常)在头(.h)文件中实现。

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

有关详细信息,请参阅为什么只能在头文件中实现模板?