template <typename T> class matrix
{
private:
class row
{
public:
T *data;
row(int n) {data = new T[n];};
...
} *rdata;
int rows, cols;
public:
matrix(int r, int c) { rows = r; cols = c; rdata = new row[r](c); };
...
il compilatore scrive (in riferimento all'ultima riga di codice che ho
riportato):
'Target of operator new()' : array initialization needs curly braces
e
'new' : 'matrix<T>::row' no default constructor to initialize arrays of
objects.
L'autore del programma ha utilizzato il codice per calcolare i parametri
pubblicati nel paragrafo "Some Results" di questo link:
http://www.rskey.org/lanczos.htm
per cui il codice dovrebbe funzionare.
Io non sono molto pratico di C++, qualcuno pu� dirmi, per favore, come
risolvere il problema?
Grazie
Cristiano
Mi pare che questa istruzione non sia ammessa, e quindi non so con quale
compilatore sia stata compilata.
Comunque puoi risolvere con le due seguenti modifiche.
La prima puo' essere togliere la seguente istruzione
row(int n) {data = new T[n];};
oppure, se ti serve, lasciala ma aggiungi nella stessa classe la
seguente istruzione:
row() { }
La seconda modifica consiste nel sostituire la seguente istruzione:
rdata = new row[r](c);
con le seguenti:
rdata = new row[r];
for (int i=0; i < r; ++i) rdata[i].data = new T[c];
--
Carlo Milanesi
http://digilander.libero.it/carlmila
Ok, vengono compilate. Grazie.
Adesso, per�, compare l'errore:
'type cast' : cannot convert from 'mpdouble' to 'double'
nell'include standard 'complex', alla riga che comincia con 'double':
static bool __CLRCALL_OR_CDECL _Isnan(_Ty _Left)
{ // test for NaN
double _Tmp = (double)_Left;
return (::_Dtest(&_Tmp) == _NANCODE);
}
Mah! Mi sa che per ogni errore corretto, ne salta fuori uno pi� strano.
Tu, per curiosit�, hai provato a compilare il codice del link?
Grazie
Cristiano