Non mi pare di aver visto nel codice da te postato la sezione per il riempimento di Casella, e al tuo codice mi sono attenuto.
La size la stai passando tu nel costruttore di tabella (int n). Che poi tu faccia:ma poi scusa è necessario dare un size al vector dal momento che il loro size puo variare di volta in volta?
non cambia la sostanza: devi creare lo spazio per mettere gli elementi. E lo spazio è sempre ncodice:/*Crea Tabella di Default a 0*/ Tabella::Tabella(int n) { tabella->resize(n); for (int i = 0; i < n; i++) { //for (int j = 0; j < n; j++) //{ Casella *casella = new Casella(); //Il Costruttore di Default di Casella, genera numero=0 e fisso=false tabella->at(i).push_back(casella); //sull'i-esimo vettore di vettore inseriamo in coda una Casella di valore 0 //} } }; // oppure /*Crea Tabella di Default a 0*/ Tabella::Tabella(int n) { for (int i = 0; i < n; i++) { tabella->push_back(); //for (int j = 0; j < n; j++) //{ Casella *casella = new Casella(); //Il Costruttore di Default di Casella, genera numero=0 e fisso=false tabella->at(i).push_back(casella); //sull'i-esimo vettore di vettore inseriamo in coda una Casella di valore 0 //} } };
Capisco. Diciamo che fa "strano" vedere allocare un vector, ma se le consegne sono queste non le discuto. Attento però che solo per chi fai una new devi far corrispondere una delete. Oltretutto le delete seguono un preciso ordine.P.S. il mio professore vuole che gli oggetti vengano istanziati dinamicamente con new;
corretto è:codice:delete &this->n; // errore: n non è un puntatore!! delete tabella; // ok, ma al posto sbagliato. tabella->clear(); // ok, ma al posto sbagliato
Lo stesso nel distruttore di Casella: numero e fisso NON sono puntatori. Niente delete.codice:tabella->clear(); // ok, ma inutile. Ci pensa delete tabella a pulire tutto. delete tabella;

Rispondi quotando