Ошибка получения компоновщика при создании экземпляра класса шаблона

0

При создании экземпляра class в main я получаю эти две ошибки:

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

Как я могу это исправить?

Теги:
templates
visual-c++

1 ответ

1

Классы шаблонов, такие как templateClass<T> должны (обычно) быть реализованы в файлах заголовка (.h).

Таким образом, вам нужно переместить содержимое templateclass.c в templateClass.h и удалить templateclass.c.

См. Почему шаблоны могут быть реализованы только в файле заголовка? Чтобы получить больше информации.

  • 0
    Спасибо Джону за ссылку. Это решило мою проблему.
  • 0
    Но я получаю еще одну ошибку, когда пытаюсь распечатать элементы массива. ошибка C2275: 'T': недопустимое использование этого типа в качестве выражения для (int i = 0; i <MAX; i ++) cout << T [i];
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню