Forum » Programiranje » [ 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? :))
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... :)).
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?
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)
(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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++ & Linux & G++ prevljalnik]Kako dodati knjižnico?Oddelek: Programiranje | 1331 (1331) | balocom |
» | Qt Designer -> KDevelop C++ ErrorOddelek: Programiranje | 2130 (1660) | 'FireSTORM' |
» | [C++] LinuxOddelek: Programiranje | 1965 (1385) | CCfly |
⊘ | defekt - c++Oddelek: Programiranje | 1132 (1050) | Vesoljc |
» | [ OOP ] Global vs. Not GlobalOddelek: Programiranje | 1252 (1047) | noraguta |