PDA

Visualizza la versione completa : [C++] Allocazione dinamica e OOP


FinalFantasy
27-10-2005, 23:41
class a
{
private:
float *ciao;
public:
a(int);
}

a::a (int arg)
{
a = new float [arg];
}


perché, secondo voi, nn va?

grazie anticipatamente?

oregon
27-10-2005, 23:57
Prima di dire cosa non va, dovresti dire, in dettaglio, cosa volevi fare (riga per riga) ...

Quello che mi lascia perplesso e' l'uso di a come puntatore all'area allocata (al suo posto dovrebbe essere usato il membro privato ciao, che e' effettivamente un puntatore a float ...).

E la dimenticanza del punto e virgola alla fine della definizione della classe.

FinalFantasy
28-10-2005, 00:45
Originariamente inviato da oregon
Prima di dire cosa non va, dovresti dire, in dettaglio, cosa volevi fare (riga per riga) ...

Quello che mi lascia perplesso e' l'uso di a come puntatore all'area allocata (al suo posto dovrebbe essere usato il membro privato ciao, che e' effettivamente un puntatore a float ...).

E la dimenticanza del punto e virgola alla fine della definizione della classe.

lascia xdere il punto e virgola visto che lo scritto solo x mostrarti l'esempio di ciò che volevo fare...volevo creare un vettore (anzi una matrice) con il parametro intero passato nel costruttore...

oregon
28-10-2005, 00:57
Non so se hai notato, ma ho parlato di "dimenticanza" per il ; ...

Per il resto ti ho detto che

a =

non ha senso, ma deve essere

ciao =

FinalFantasy
28-10-2005, 11:43
Vabbè, posto la classe com'è in realtà


class Grafo
{
private:
int n_nodi;
float *ListaAdiacenza;
bool pesato,orientato;
public:
Grafo(int,bool,bool);
bool AddArco(int,int,float);
void PrintGrafo();
};

Grafo::Grafo(int n,bool p,bool o) : pesato(p),orientato(o)
{
ListaAdiacenza = new float[n][n];
}

mi da errore nell'istruzione del costruttore.

anx721
28-10-2005, 18:52
Prova cosi:



class Grafo
{
private:
int n_nodi;
float **ListaAdiacenza;
bool pesato,orientato;
public:
Grafo(int,bool,bool);
bool AddArco(int,int,float);
void PrintGrafo();
};

Grafo::Grafo(int n,bool p,bool o) : pesato(p),orientato(o)
{
ListaAdiacenza = new (float *)[n];
for(int i = 0; i < n; i++)
ListaAdiacenza[i] = new float[n];
}

FinalFantasy
28-10-2005, 19:43
Originariamente inviato da anx721
Prova cosi:



class Grafo
{
private:
int n_nodi;
float **ListaAdiacenza;
bool pesato,orientato;
public:
Grafo(int,bool,bool);
bool AddArco(int,int,float);
void PrintGrafo();
};

Grafo::Grafo(int n,bool p,bool o) : pesato(p),orientato(o)
{
ListaAdiacenza = new (float *)[n];
for(int i = 0; i < n; i++)
ListaAdiacenza[i] = new float[n];
}



mi da errore qui: ListaAdiacenza = new (float *)[n];

mi dice: Parse error before ')'

anx721
28-10-2005, 19:59
che compilatore usi? il mingw/gcc lo compila...magari provaa togliere le parentesi tonde attorno a float *

FinalFantasy
28-10-2005, 20:07
Originariamente inviato da anx721
che compilatore usi? il mingw/gcc lo compila...magari provaa togliere le parentesi tonde attorno a float *

a me nn lo compila...devcpp con gcc...le ho tolte ma niente


Grafo::Grafo(int n,bool p,bool o) : n_nodi(n),pesato(p),orientato(o)
{
ListaAdiacenza = new (*float) [n];


for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
ListaAdiacenza[i] = new float [n];
ListaAdiacenza[i][j] = INFINITO;
}
}

anx721
28-10-2005, 20:36
che versione di devcpp usi? sei sicuro di avere il mingw?

Loading