» »

[ C++ ] Templati, ki delajo preglavice...

[ C++ ] Templati, ki delajo preglavice...

BigWhale ::

Torej, naredil sem en class template in ga preizkusil, vse je delovalo tako kot treba.

Potem sem pa to probal prenesti se v prakso. Template definicijo sem preselil v common.h, v common.cpp izvedel implementacijo. Vse ok. Zadeva se prevede.

v lala.h sem potem definiral instanco tega class-a, definicija se nahaja v nekem drugem classu, torej...

... snip snip...

private:
sTotal<double> m_total;
...
}


V lala.cpp potem poklicem neko metodo iz tega classa...

ret = m_total.foo();

Nakar, mi pri prevajanju(linkanju), ze ob sami definiciji m_total linker crkne z undefined reference na konstruktor tega classa.

Najbrz je pomemben podatek tudi to, da je v common.cpp/h se polno drugih stvari, ki cisto lepo delajo, ce jih klicem iz lala.cpp. common.cpp je pa cisto svoja dinamicna knjiznjica, ki je do uvedbe tega template-a delala povsem normalno...

Prav tako dela ta template cisto normalno, ce ga skopiram v a.cpp ni prevedem :)

Hm, torej, kaj sem pozabil? :))

CCfly ::

Huh ne bi vedel.
Daj poskusi še kaj se zgodi če bi poklical ret = m_total.foo(); nekje v konstruktorju kar v lala.h (class ... snip snip... :)).
"My goodness, we forgot generics!" -- Danny Kalev

BigWhale ::

deklaracije member funkcij sem prestavil v .h file, zdaj dela... weird...
Je to pri templateih drugace? Ali ga samo jaz nekaj serjem?

Vesoljc ::

afaik, mora biti implment template memberjev v headerju...
(nom še vedno lahko rečeš include *.cpp)
Abnormal behavior of abnormal brain makes me normal...

CCfly ::

Ko sem začel uporabljati template sem dobil občutek, da so cpp datoteke skoraj odvečne. KAr je škoda glede na to, da sem jih uporabljal kot hitri reference.
"My goodness, we forgot generics!" -- Danny Kalev

BigWhale ::

No, jaz sem nucal samo en class, ki bo podpiral sestevanje in odstevanje, katermu bom potem notri filal int/double/float/.... ven bom pa dobil sestevek in se nekaj drugih malenkosti... Precej stvari se vedno ostane v .cppjih, sploh vsa tista KDE solata ;>

Gundolf ::

Templatei se ne prevajajo v naprej ampak vsakic ko prevajalnik najde deklaracijo. Se pravi da vsa struktura .h in .cpp fajlov tu odpade. Nimas namrec nicesar kar bi lahko dal v .cpp, da bi se prevedlo le enkrat, zapisalo v .o fajl in potem le linkalo. Template se mora pac prevesti za vsak nov tip nanovo. Template se pusti vedno v celoti v .h fajlu. Ni treba pisat funkcij inline, ce ti to ni vsec, vazno je le, da imaš tudi implementacio zraven.

BigWhale ::

Ja, sem sel malo brskat potem okrog teh zadev, pa sem nasel odgovor na to. Niso tako zelo napacna rec tile templati... :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++ & Linux & G++ prevljalnik]Kako dodati knjižnico?

Oddelek: Programiranje
91238 (1238) balocom
»

Qt Designer -> KDevelop C++ Error

Oddelek: Programiranje
352051 (1581) 'FireSTORM'
»

[C++] Linux

Oddelek: Programiranje
171886 (1306) CCfly

defekt - c++

Oddelek: Programiranje
51038 (956) Vesoljc
»

[ OOP ] Global vs. Not Global

Oddelek: Programiranje
141178 (973) noraguta

Več podobnih tem