Ho un problema nell'indicizzazione di una matrice.
La classe Canvas gestisce una matrice dinamica. La funzione darken dovrebbe cambiare lo stato delle "caselle" della matrice da bianco a nero. Ma con mia sorpresa l'output è il seguente:codice:#include <iostream> using namespace std; enum colore{bianco=0, grigio, nero}; class Canvas{ int m, n; colore** col; friend ostream& operator<<(ostream&, const Canvas&); public: Canvas(int, int); ~Canvas(); Canvas& operator=(const Canvas&); bool clear(int, int); void darken(int, int); }; ostream& operator<<(ostream& os, const Canvas& ca){ for(int i=0; i<ca.n; i++) { for(int j=0; j<ca.m; j++) { if(ca.col[i][j]==0) os << ". "; if(ca.col[i][j]==1) os << "G "; if(ca.col[i][j]==2) os << "N "; } os << endl; } return os; } Canvas::Canvas(int i, int j){ m=i; n=j; col=new colore*[m]; for(int i=0; i<m; i++) col[i]=new colore[n]; for(int i=0; i<m; i++) { for(int j=0; j<m; j++) col[i][j]=bianco; } } Canvas::~Canvas(){ for(int i=0; i<m; i++) delete[] col[i]; delete[] col; } Canvas& Canvas::operator=(const Canvas& ca){ if(this==&ca) return *this; for(int i=0; i<m; i++) delete[] col[i]; delete[] col; m=ca.m; n=ca.n; col = new colore*[m]; for(int i=0; i<m; i++) col[i]=new colore[n]; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) col[i][j]=ca.col[i][j]; } return *this; } bool Canvas::clear(int i, int j){ if(i>m || j>n) return false; if(col[i][j]==bianco) return false; else col[i][j]=bianco; return true; } void Canvas::darken(int i, int j){col[i][j]=nero;} int main(){ Canvas c(9,4); cout << c << endl; c.darken(1,1); cout << c << endl; return 0; }
Mi sarei aspettato che l'unica modifica fosse quella della casella indicizzata con (1,1) invece come potete osservare non è così.codice:[Session started at 2008-12-23 15:42:45 +0100.] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N . . . . N . . . . . . . . . . . . . . . . . . . . . . . . . The Debugger has exited with status 0.
Ringrazio chi mi aiuterà.

Rispondi quotando
