Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Inizializzare array di oggetti

4 views
Skip to first unread message

Cristiano

unread,
Oct 21, 2009, 1:29:53 PM10/21/09
to
Tentando di compilare il seguente codice:

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


Carlo Milanesi

unread,
Oct 21, 2009, 6:12:42 PM10/21/09
to
Cristiano ha scritto:

> rdata = new row[r](c);

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

Cristiano

unread,
Oct 21, 2009, 6:35:57 PM10/21/09
to
Carlo Milanesi wrote:
> Comunque puoi risolvere con le due seguenti modifiche.

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


0 new messages