PDA

Visualizza la versione completa : [c++] Help sugli array


Xadoom
12-04-2004, 22:30
Scusate ma non ne esco pi....allora ho fatto una classe Complesso, ora sto facendo una classe Matrice in cui devo creare una matrice di Complessi allocandola in modo dinamico....come diavolo si f??? :dh: :dh:
Ecco i miei tentativi:


class Matrice{

public: /*Costruttore*/
Matrice(int,int);

private: int const DIM1,DIM2;
Complesso matr[][+;
};

Matrice :: Matrice(int d1,int d2)
: DIM1(d1),DIM2(d2){
matr = new Complesso[DIM1][DIM2];
}

Ma mi d errore in compilazione


incompatible types in assignment of `Complesso

Ho provato anche in altri mille modi, ma non ho mai il risultato desiderato, aiuto!!
:ciauz:

bstefano79
12-04-2004, 23:52
tanto che non programmo in c++ il problema secondo me sta qui
matr = new Complesso[DIM1][DIM2];
sbagliata la chiamata al costruttore di Complesso!!!!!!!!!

non so precisamente come risolvere il problema in java lo risolverei con le classi contenitori tipo Vevtor ma non ricordo se tali classi ci sono anche in c++; in c++ lo potresti risolvere con la malloc() ma non ricordo se esiste tale funzione in c++ :)

Sergio Pedone
12-04-2004, 23:55
Ciao Xadoom!

Ne avevamo gi discusso, lo so.
Anch'io credo che il problema sia nella chiamata
del costruttore (di default ?) di Complesso.
Ma fintanto che il codice non si vede,
diventa difficile aiutarti.

:ciauz:

Sergio Pedone
13-04-2004, 00:00
Ancora una cosa.

const int DIM1, DIM2;
// dichiari due interi costanti ma non li inizializzi

DIM1(d1), DIM2(d2)
// che significano?

:fagiano:

Xadoom
13-04-2004, 09:51
Originariamente inviato da Sergio Pedone
Ancora una cosa.

const int DIM1, DIM2;
// dichiari due interi costanti ma non li inizializzi

DIM1(d1), DIM2(d2)
// che significano?

:fagiano:
Inizializzo le costanti nella chiamata al costruttore della classe.
Per il costruttore di default, non capisco, cosa deve avere di particolare? io l'ho scritto, ma normalmente, inizializza le variabili private e basta.....pi tardi lo posto.
Altre idee? :ciauz:

bstefano79
13-04-2004, 13:55
Prova cos

[code]
class Matrice{

public: /*Costruttore*/
Matrice(int,int);

private: int const DIM1,DIM2;
Complesso matr[][];
};

Matrice :: Matrice(int d1,int d2)
{
DIM1=d1;
DIM2=d2;
matr = new Complesso[DIM1][DIM2];
int i,j;
for(i=0;i<DIM1;i++)
{
for(j=0;j<DIM2;j++)
{
matr[i][j]=new Complesso();
}
}
}
[\code]

In java una cosa simile funziona

bstefano79
13-04-2004, 14:00
Ho avuto problemi con Vb :) :gren:




class Matrice{

public: /*Costruttore*/
Matrice(int,int);

private: int const DIM1,DIM2;
Complesso matr[][];
};

Matrice :: Matrice(int d1,int d2)
{
DIM1=d1;
DIM2=d2;
matr = new Complesso[DIM1][DIM2];
int i,j;
for(i=0;i<DIM1;i++)
{
for(j=0;j<DIM2;j++)
{
matr[i][j]=new Complesso();
}
}
}

Xadoom
13-04-2004, 14:51
Ma proprio quello che faccio, lo so che in Java si fa cos, ma in c++ non mi funge.... :dh:

Xadoom
13-04-2004, 15:45
Ecco come ho implementato la classe Complesso, per favore Help !! Altrimenti credo che lascer questo "progetto".... :dh:


class Complesso{
/*Implementa un numero complesso del tipo a+jb */

public: /*Costruttori*/
Complesso();
Complesso(double);
Complesso(double,double);
/*Vari metodi*/

private: double a; //Parte reale
double b; //Parte immaginaria

};
/*Costruttori*/
Complesso :: Complesso(double x, double y){a = x; b = y;}
Complesso :: Complesso(double a){Complesso(a,0);}
Complesso :: Complesso(){Complesso(0,0);}

Sergio Pedone
13-04-2004, 17:42
Utilizzando i puntatori, riesco a compilarlo.
$ g++ -c test.cpp -o test.o


class Complesso{
/*Implementa un numero complesso del tipo a+jb */

public: /*Costruttori*/
Complesso();
Complesso(double);
Complesso(double,double);
/*Vari metodi*/

private: double a; //Parte reale
double b; //Parte immaginaria

};
/*Costruttori*/
Complesso :: Complesso(double x, double y){a = x; b = y;}
Complesso :: Complesso(double a){Complesso(a,0);}
Complesso :: Complesso(){Complesso(0,0);}

class Matrice{

public: /*Costruttore*/
Matrice(int,int);

private: const int DIM1,DIM2;
Complesso** matr;//[][];
};

Matrice :: Matrice(int d1,int d2) : DIM1(d1),DIM2(d2) {
matr = new Complesso*[DIM1];
for (int i = 0; i < DIM1; i++) {
matr[i] = new Complesso[DIM2];
}
}

Loading