se elimino la & mi da errore, se elimino il this o paura di non eliminare la n dell'oggetto corrente. sbaglio?
grazie, questa non la sapevo e mi hai tolto il primo dubbio, il secondo è, essendo tabella un vector, e addirittura un vector di vector, dovrei fare delete[] oppure delete[][] ?corretto è:
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;
ti posto inoltre il codice che ho steso, adesso la matrice carica gli elementi, il problema è che non istanziavo un vector nuovo da aggiurere al vector di vector tabella ogni volta, davo per scontato che istanziando un vector di vector gia istanziasse in automatico una matrice. sono neofitissimo scusa. il problema ora è che quando vado a stampare, stampa solo la prima riga, i primi 4 zeri credo, ma poi va in stack overflow, non capisco credo di aver rispettato tutti i size.
tu che dici? guarda
codice:#include "Casella.h"#include <vector> #include <iostream> class Tabella { private: int n; std::vector<std::vector<Casella*>*> *tabella = new std::vector<std::vector<Casella*>*>(); public: Tabella(int n); /*Crea Tabella di Default a 0*/ ~Tabella(); void mostraSudoku(); void esisteSuRiga(); void esisteSuColonna(); void esisteInRegione(); }; /*Crea Tabella di Default a 0*/ Tabella::Tabella(int n) { for (int i = 0; i < n; i++) { std::vector <Casella*> *vec = new std::vector<Casella*>(); tabella->push_back(vec); std::cout << "creato sottovettore " << i << std::endl; } 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 std::cout << "inserita casella " << i <<" "<<j<< std::endl; } } }; Tabella::~Tabella() { for (int i = 0; i < tabella->size(); i++) { for (int j = 0; j < tabella->size(); j++) { delete tabella->at(i)->at(j); //sull'i-esimo vettore di vettore inseriamo in coda 0 } tabella->at(i)->clear(); //libera la memoria di ogni vettore } delete &this->n; delete tabella; tabella->clear(); } void Tabella::mostraSudoku() { unsigned int i; for (i = 0; i < 4; i++) { unsigned int j; for (j = 0; j < 4; i++) { std::cout << tabella->at(i)->at(j)->getNumero(); } std::cout << std::endl; } };