» »

[C++] Class template- kaj delam narobe?

[C++] Class template- kaj delam narobe?

c0dehunter ::

Potrebujem pomoč, prevajalnik mi namreč javlja
[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.

Senitel ::

Imaš file "Datoteka" sploh linkan zraven (kater compiler?)?
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.
I do not agree with what you have to say,
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.

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.


Vredno ogleda ...

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

[C] podatkovni tipi

Oddelek: Programiranje
121168 (960) bi0s
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657356 (6429) MrBrdo
»

Kopiranje vsake druge datoteke

Oddelek: Pomoč in nasveti
71179 (979) Okapi
»

[C++] novi standardi in compilerji

Oddelek: Programiranje
211616 (1209) Ezekiel
»

kazalci in polje

Oddelek: Programiranje
51679 (1600) rasta

Več podobnih tem