Podział kodu klasy na pliki błąd error LNK2019

0

Witam

Mam problem z podziałem klasy na plik nagłówkowy i logiki. Gdy wpiszy wsyzkstko w pliku nagłówkowym nie ma problemu natomiast gdy przeniosę konstruktor do pliku cpp, to lnker daje błąd: main.obj : error LNK2019: unresolved external symbol "public: __thiscall ArrayList<int>::ArrayList<int>(void)"

mój kod to:

#pragma once
#include "IndexOutOfBoundsException.h"
template <class T>
class ArrayList
{
    T** dynamicArray;
    int increase;
    int count;
    int capacity;
public:
    ArrayList();
    void  add(T* item);
    T* operator[](int index)const;
}; 

a także:

 #include"ArrayList.h"

template<class T>
ArrayList<T>:: ArrayList()
{
    increase=5;
    dynamicArray = new T*[increase];
    capacity=5;
    count=0;
}
template<class T>
void ArrayList<T>::add(T* item)
{
}
template<class T>
T* ArrayList<T>::operator[](int index)const
{
}
1

A od kiedy jakiś kompilator wspiera taki podział dla klas szablonowych?

0

Niestety nie wiedziałem że nie wspiera dlatego napisałem. Nie programuje zazwyczaj w c++ wiec takie niuanse nie są mi znane. Dziękuję za tak szybką odpowiedź. Czyli nie ma możliwości na rozwiązanie tego problemu bez zostawienia całego kodu w pliku nagłówkowym?

0

Jest możliwe, ale trzeba dodać "specjalizację" dla każdego typu z jakim będziemy używać danej klasy szablonowej. Np. jeśli ArrayList miałby być używany z typem int to w pliku z implementacją (ArrayList.cpp ?) musi się znaleźć:

template class ArrayList<int>;

Więcej pod hasłem "explicit template specialization".
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0