Ho le dispense di un professore, un libro, un paio di link che lo dicono (...non so se posso pubblicarli)... immagino siano poco affidabili, però ho ancora qualcosa che non riesco a capire.
Il dubbio che ho posto, in realtà, nasce da una questione più articolata relativa alla OOP, che io pensavo di ricondurre ad un semplice problema di dichiarazione, ma deduco che non sia così.
Provo a spiegarmi.
Supponi di avere una classe che ha tra gli attributi un array dinamico. Se io dichiaro l'attributo in questo modo:
int iArray[];
Non mi viene segnalato alcun errore. Perchè?
Ho fatto questa classe "useless" solo per testare la questione:
class c{
private:
int iArray[];
int dim;
public:
c(){ dim=0; }
c(int num){ dim=1; iArray[0]=num; }
void print(){ cout<<iArray[0]<<endl; }
int getdim(){ return dim; }
};
il codice viene tranquillamente compilato ma, quando lo vado ad eseguire (con un main ad hoc), sballa: la dimensione rimane 0 e nell'array ho un valore a casaccio.
Quindi, ne ho dedotto (forse è qui che sbaglio?), che l'array deve essere allocato, ma se aggiungo l'istruzione:
class c{
private:
int iArray[];
int dim;
public:
c(){ dim=0; }
c(int num){ dim=1; iArray=new int[dim]; iArray[0]=num; }
void print(){ cout<<iArray[0]<<endl; }
int getdim(){ return dim; }
};
ho errore di compilazione:
incompatible types in assignment of `int*' to `int[0u]'
Che significa? Che sto cercando di piazzare un valore in un puntatore? Quindi l'array non è dinamico?
Boh, ne uscirò pazza...
Grazie della pazienza!
Annika