L'errore l'ho risolto estraendo la funzione cancel() da copy() e chiamandola solo nell'operatore =.
Ora però ho un problema di segmentation fault sulla seguente moltiplicazione di matrici...
codice:
template <typename T>
Matrix<T>& Matrix<T>::operator*=(const Matrix<T>& m)
{
if( col != m.row ) // Verifica se la moltiplicazione é definita
{
throw std::range_error("");
}
Matrix<T> tmp(*this); // Salva la matrice corrente in una temporanea
col = m.col; // Setta le colonne della matrice per contenete la matrice risultante (le linee rimangono inalterate)
cancel(); // Elimina i dati contenuti precedentemente
data = new T*[row]; // Rialloca la memoria con la nuova dimensione
for(int i(0); i < row; i++)
{
data[i] = new T[col];
}
for(size_t i(0); i < row; i++) // Scorre sulle line
{
for(size_t j(0); j < col; j++) // Scorre sulle colonne
{
for(size_t k(0); k < m.col; k++ ) // Somma i temrini
{
data[i][j] += tmp.data[i][k] * m.data[k][j];
}
}
}
return *this; // Ritorna la matrice corrente
}
Qualcuno sa dirmi dove sbaglio?
Grazie!