Terve,
Elikkä sellasta kyselisin, että tarvitseeko C++ mallille määrittää aina minkä tyyppistä tietotyyppiä se voi käyttää?
Eli:
#ifndef UEPOINTERLIST_H #define UEPOINTERLIST_H #include "ueglobals.h" template<class T> class UEPointerList { public: UEPointerList<T>(); ~UEPointerList<T>(); }; #endif
Katso kommentti.
#include "uepointerlist.h" // Jos poistan tämän <int> määrityksen linkkeri antaa virheen. template class UEPointerList<int>; template<class T> UEPointerList<T>::UEPointerList() { } template<class T> UEPointerList<T>::~UEPointerList() { }
//Käyttö UEPointerList<int> _plTexturePointerList;
Template luokkien jäsen funktiot pitää määritellä headerissä. Erillästä koodi tiedostoa ei tarvitse tehdä.
Tämä johtuu siitä että template luokkaa ei voi kääntää ennen kuin sen tyyppi parametrit on tiedossa.
#ifndef UEPOINTERLIST_H #define UEPOINTERLIST_H #include "ueglobals.h" template<class T> class UEPointerList { public: UEPointerList<T>() { } ~UEPointerList<T>() { } }; #endif
Lahha kirjoitti:
Template luokkien jäsen funktiot pitää määritellä headerissä.
Varsinaisesti ei ole pakko, vaan voi tehdä myös noin, kuin kayttaja-3842 on tehnyt. Silloin kuitenkin pitää päättää valmiiksi, mille tyypeille templaatti käännetään. Jos tiedetään, mitä tarvitaan, tästä on hyötyäkin: toteutukset ovat eri tiedostossa ja niitä voi muokata ilman, että koko projektia tarvitsee kääntää uudestaan.
Jos taas funktiot ovat otsikkotiedostossa, kääntäjä voi kääntää ne tarpeen mukaan. Toisaalta funktioiden muuttuessa kaikki templaattia käyttävät kooditiedostot täytyy kääntää uudestaan, koska funktiot on käännetty niiden jokaisen mukaan.
Tosiaan vaatikin noiden metodien määrityksen tuossa headereissa.
Nyt toimii, kiitos. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.