Code:
Niz<double> s1;
s1[0] = 3.23;
Niz<int> s2(s1);
s2[2] = 4;
Niz<double> s1;
s1[0] = 3.23;
Niz<int> s2(s1);
s2[2] = 4;
Stoga sam napravio konstruktor sa parametrom:
Code:
template <class U>
Niz(const Niz<U>& n) :
_duzina(n._duzina),
_obezbedjeno(n._duzina),
_elementi( n._duzina>0 ? new T[n._duzina] : 0)
{
for( unsigned i=0; i<_duzina; i++ )
_elementi[i] = (T) n._elementi[i];
}
template <class U>
Niz(const Niz<U>& n) :
_duzina(n._duzina),
_obezbedjeno(n._duzina),
_elementi( n._duzina>0 ? new T[n._duzina] : 0)
{
for( unsigned i=0; i<_duzina; i++ )
_elementi[i] = (T) n._elementi[i];
}
I posto su _duzina i _elementi privatni, uveo da je Niz<int> prijatelj svih raspisa sablona Niz. I to sada radi. Medjutim problem je kada su tipovi isti:
Code:
Niz<int> q1;
q1[0] = 3;
Niz<int> q2(q1);
cout << "q1: " << q1 << endl;
cout << "q2: " << q2 << endl;
Niz<int> q1;
q1[0] = 3;
Niz<int> q2(q1);
cout << "q1: " << q1 << endl;
cout << "q2: " << q2 << endl;
Tada uopste ne bude pozvan ovaj moj konstruktor, vec nesto sto stvarno predstavi elemente q1 kao elemente q2 ali pri tom izgleda da ne pravi kopiju. Tako da pri destrukciji naletim na problem. Izlaz:
Code:
Konstruktor bez parametara
q1: [1:3]
q2: [1:3]
a.out(21157) malloc: *** error for object 0x500180: double free
Konstruktor bez parametara
q1: [1:3]
q2: [1:3]
a.out(21157) malloc: *** error for object 0x500180: double free
Prikazio sam ceo kod u prilogu.
Meni nije jasno gde je uopste nestao poziv konstruktora sa parametrom??? Ok, kada je U == T raspis sablona izgleda nije ispravan, ali na koji nacin on pravi objekat p2, odnosno q2 tako da njegova duzina i elementi budu oni iz p1, odnosno q1... I naravno, kako treba napisati kod da ovo funkcionise?
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
prezentacije, legalno bez troškova licenciranja