Ho un problema nell'indicizzazione di una matrice.
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;
}
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:
[Session started at 2008-12-23 15:42:45 +0100.]
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . N . . .
. N . . . . . . .
. . . . . . . . .
. . . . . . . . .
The Debugger has exited with status 0.
Mi sarei aspettato che l'unica modifica fosse quella della casella indicizzata con (1,1) invece come potete osservare non è così.
Ringrazio chi mi aiuterà.