PDA

View Full Version : [C++]Problema con template 2


Kleidemos
31-03-2003, 14:33
Ora ho deciso di fare sta funz:

template<class T>
void Vettore<T>::Ridimensiona(int new_dim)
{
// Copia in una var temporanea
T tmp = new T[dimensione];
tmp = elementi;
int old_dim = dimensione;
// Cancella
delete[] elementi;
delete dimensione;
// Ricrea con nuova dim
elementi = new T[new_dim];
for(int i=0;i<old_dim;i++)
{
elementi[i] = tmp[i];
}
delete[] tmp;
}



Ma mi da:

--------------------Configuration: Vettore - Win32 Release--------------------
Compiling...
Test.cpp
C:\Progetti\Vettore\Vettore.cpp(123) : error C2440: 'initializing' : cannot convert from 'int *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
C:\Progetti\Vettore\Vettore.cpp(124) : error C2440: '=' : cannot convert from 'int *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
C:\Progetti\Vettore\Vettore.cpp(127) : error C2541: delete : cannot delete objects that are not pointers
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
C:\Progetti\Vettore\Vettore.cpp(128) : error C2541: delete : cannot delete objects that are not pointers
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
C:\Progetti\Vettore\Vettore.cpp(133) : error C2109: subscript requires array or pointer type
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
C:\Progetti\Vettore\Vettore.cpp(135) : error C2541: delete : cannot delete objects that are not pointers
C:\Programmi\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : while compiling class-template member function 'void __thiscall Vettore<int>::Ridimensiona(int)'
Error executing cl.exe.

Vettore.exe - 6 error(s), 0 warning(s)

cionci
31-03-2003, 15:41
tmp = elementi non va bene...così copi solamente il puntatore...
tmp inoltre deve essere un T *...

Perchè fai la delete su dimensione ? dimensione non è un puntatore...

T *tmp = new T[new_dim];
int n = (new_dim < dimensione)?new_dim:dimensione;
for(int i=0; i<n; ++i)
{
tmp[i] = elementi[i];
}
delete[] elementi;
elementi = tmp;