Problem z kompilacją rozdzielną i klasami szablonowymi

0

Witam,
mój problem jest następujący: mam trzy pliki:
lista.h

#ifndef _LISTA_H
#define _LISTA_H

class Lista
{
public:
	void Czesc();
};

#endif
 

oraz lista.cpp

#include "stdafx.h"
#include "lista.h"

void Lista::Czesc()
{}
 

i main.cpp

#include "stdafx.h"
#include "lista.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Lista l;
	l.Czesc();
	return 0;
}

i taki kod kompiluje się bez przeszkód. Jednak kiedy robię klasę jako szablonową:

lista.h

#ifndef _LISTA_H
#define _LISTA_H

template <class Typ>
class Lista
{
public:
	void Czesc();
};

#endif
 

lista.cpp

#include "stdafx.h"
#include "lista.h"

template <class Typ>
void Lista<Typ>::Czesc()
{}
 

main.cpp

#include "stdafx.h"
#include "lista.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Lista<int> l;
	l.Czesc();
	return 0;
}

kompilator wywala następujące błędy:

Error 1 error LNK2001: unresolved external symbol "public: void __thiscall Lista<int>::Czesc(void)" (?Czesc@?$Lista@H@@QAEXXZ) G:\Moj_folder\Moje dokumenty\Visual Studio 2010\Projects\pk2-lab-lista_na_klasach\pk2-lab-lista_na_klasach.obj pk2-lab-lista_na_klasach

Error 2 error LNK1120: 1 unresolved externals G:\Moj_folder\Moje dokumenty\Visual Studio 2010\Projects\pk2-lab-lista_na_klasach\Debug\pk2-lab-lista_na_klasach.exe 1 1 pk2-lab-lista_na_klasach

ktoś wie dla czego tak się dzieje?
z góry dziękuje za odpowiedź
pozdrawiam

0

Niestety taka bolączka szablonów, deklaracje i definicje trzymaj w jednym pliku.

0

hmm, no trudno. A może ktoś doradzić, w jakim pliku to wszystko trzymać? H czy CPP?
i mógłby mi ktoś wytłumaczyć, dla czego tak jest że szablony muszą być w jednym pliku?

0

hmm, no trudno. A może ktoś doradzić, w jakim pliku to wszystko trzymać? H czy CPP?
.h

i mógłby mi ktoś wytłumaczyć, dla czego tak jest że szablony muszą być w jednym pliku?
po prostu jedno z wielu miejsc, w których język C++ jest zwalony. długa historia a przyczyna skomplikowana ;-)

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