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