Definice šablonové třídy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Definice šablonové třídy – C / C++ – Fórum – Programujte.comDefinice šablonové třídy – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
9. 9. 2009   #1
-
0
-

Já a šablonové třídy jsme se nikdy moc nekamarádili. Už hodinku bojuji s definicí;
hlavičkvoý soubor

template <class T> class grafika

{
public:
grafika(void);
~grafika(void);
T* get(unsigned int , unsigned int);
void vytvorit(unsigned int, unsigned int);
private:
vector<map<unsigned int, T> > data;
};

cpp soubor:
template <class T> grafika<T>::grafika(void)

{
}

template <class T> grafika<T>::~grafika(void)
{
}

template <class T> T* grafika<T>::get(unsigned int i, unsigned int j)
{
if(i > data.size())
return NULL;//Takový prvek neexistuje
return &data[i][j];
}

template <class T> void grafika<T>::vytvorit(unsigned int i, unsigned int j)
{
if(i > data.size())
return;//Takový prvek neexistuje
if (data[i].find(j) == end())
{
data[i][j] = data[i][0].natocit(j);
}
}
}


Vždy, když chci nějakou část použít, skončím s chybou linkeru LNK2019: unresolved external symbol.
Kde mám chybu? Děkuji za odpověď

Nahlásit jako SPAM
IP: 85.160.65.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Jura
~ Anonymní uživatel
637 příspěvků
9. 9. 2009   #2
-
0
-

Zdravím,

pokud pracuješ se šablonami, tak je vhodné psát i implementaci do hlavičkového souboru.

Nahlásit jako SPAM
IP: 85.207.192.–
yaqwsx+9
Posthunter
9. 9. 2009   #3
-
0
-

To Jura : Aha, když je všechno v hlavičče tak to funguje. Díky.
Jak to ale napsat, aby to mohlo být v samostatném souboru?

Nahlásit jako SPAM
IP: 85.160.65.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
9. 9. 2009   #4
-
0
-

zisti ci tvoj kompilator podporuje slovo export (len malo kompilatorov ho podporuje) nim sa to da ale uprine presne ako neviem lebo gcc to nema tak som to nikdy neskusal

Alebo taky trik : na spodok hlavicky includuj .cpp subor a samostatny cpp subor nekompiluj

Nahlásit jako SPAM
IP: 217.118.98.–
ondra.holub+1
Stálý člen
9. 9. 2009   #5
-
0
-

Já to píšu do souboru s příponou tpl (je to úplně jedno, jak se to jmenuje) a ten pak #includuju jenom tam, kde je potřeba. Obecně používám (samozřejmě ne vždycky) 4 typy souborů:
- header s forward deklaracemi
- header
- implementaci
- implementaci šablon

Nahlásit jako SPAM
IP: 89.203.160.–
yaqwsx+9
Posthunter
10. 9. 2009   #6
-
0
-

Díky za rady. Jak jsme ještě googlil, tak šablonové třídy musí být definované v hlavičkovém souboru (našel jsem ještě způsob jak to dostat do samostatně kompilovaného cpp souboru, ale bylo to zbytečně složité).

Nahlásit jako SPAM
IP: 85.160.85.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
tmi0
Věrný člen
14. 9. 2009   #7
-
0
-

v principu si nikdy moc nepomuzes, kazde pouziti sablony musi mit pristupnou definici v dobe kompilace --- v dobe linkovani to nestaci --- protoze sablony jsou v podstate takovy preprocesor...

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý