Forum » Programiranje » [C++] Class template- kaj delam narobe?
[C++] Class template- kaj delam narobe?
c0dehunter ::
Potrebujem pomoč, prevajalnik mi namreč javlja
Datoteka .h (samo relevanten del):
Datoteka .cpp (samo relevanten del):
V glavnem programu imam tole:
Kaj počnem narobe?
[Linker error] undefined reference to `Aritmetika<double>::Aritmetika(double*, int)'
Datoteka .h (samo relevanten del):
template<typename T> class Aritmetika{ protected: T* polje; int st_el; public: Aritmetika(); Aritmetika(T p[],int n); ~Aritmetika();
Datoteka .cpp (samo relevanten del):
#include "Aritmetika.h" template<typename T> Aritmetika<T>::Aritmetika(): polje(NULL), st_el(0) {} template<typename T> Aritmetika<T>::Aritmetika(T p[],int n): polje(p), st_el(n) { } template<typename T> Aritmetika<T>::~Aritmetika(){ delete[] polje; }
V glavnem programu imam tole:
double polje1[]={2,3,4.2,2.1}; Aritmetika<double> a1(polje1, (sizeof polje1/sizeof polje1[0]));
Kaj počnem narobe?
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Senitel ::
Imaš file "Datoteka" sploh linkan zraven (kater compiler?)?
Pa delete v destructorju ne bo ravno zdrava ideja, če imaš statično alociran array.
Pa delete v destructorju ne bo ravno zdrava ideja, če imaš statično alociran array.
Zgodovina sprememb…
- spremenil: Senitel ()
c0dehunter ::
V glavnem programu imam includano Aritmetika.h. Delam pa v Dev-Cpp.
Glede destruktorja - a ni tako da je treba sprostit pomnilnik, če imam pointer na array?
P.s.: ugotovil sem, da če v glavnem programu naredim novo instanco objekta Aritmetika z praznim konstruktorjem, dela ok. Sumim, da je neka napaka pri arrayu.
Glede destruktorja - a ni tako da je treba sprostit pomnilnik, če imam pointer na array?
P.s.: ugotovil sem, da če v glavnem programu naredim novo instanco objekta Aritmetika z praznim konstruktorjem, dela ok. Sumim, da je neka napaka pri arrayu.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
rasta ::
Šablone (templates) ne moreš postaviti v ločeno .cpp datoteko in jo ločeno prevesti. Ob prevajanju mora imeti prevajalnik deriniran typename T.
Ne, ni tako. Sprostiš samo pomnilnik zasežen z operatorjem new (ali C-jevskimi ekvivalenti malloc, calloc, itd.).
Vsak klic new naj bi tako imel tudi klic delete.
a ni tako da je treba sprostit pomnilnik, če imam pointer na array?
Ne, ni tako. Sprostiš samo pomnilnik zasežen z operatorjem new (ali C-jevskimi ekvivalenti malloc, calloc, itd.).
Vsak klic new naj bi tako imel tudi klic delete.
c0dehunter ::
Hvala rasta. Torej, če prav razumem, kadar delaš s šablonami dodatna .cpp datoteka odpade, ker vse deklariraš v .h?
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] podatkovni tipiOddelek: Programiranje | 1168 (960) | bi0s |
» | [C] struct in int[] (strani: 1 2 )Oddelek: Programiranje | 7356 (6429) | MrBrdo |
» | Kopiranje vsake druge datotekeOddelek: Pomoč in nasveti | 1179 (979) | Okapi |
» | [C++] novi standardi in compilerjiOddelek: Programiranje | 1616 (1209) | Ezekiel |
» | kazalci in poljeOddelek: Programiranje | 1679 (1600) | rasta |