class Luokka{
private:
int i,j;
int taulukko[i][j];
public:
Luokka(int n,int m):i(n)m,j(m){}
};
int main(){
Luokka a(4,4);
}
ei toimi!
Miten taulukon koon saa oliota luotaessa määritettyä?
private:
int i,j;
int taulukko[i][j];
public:
Luokka(int n,int m):i(n)m,j(m){}
};
int main(){
Luokka a(4,4);
}
ei toimi!
Miten taulukon koon saa oliota luotaessa määritettyä?
Vastaukset 6
Vanhimmat
Ei tietenkään toimi noin, mutta olisiko
int taulukon_koko = 0;
sizeof taulu[0];
taulukon_koko = yhden_alkion_koko * alkioiden_lkm
tai jotain vastaavaa
Kiitos avusta, mutta...
Tarkoitin sitä, että kullekkin oliolla haluan erikokoisen taulukon.
Luokka a(4,4) luo int[4][4]-taulukon
Luokka b(7,2) luo int[7][2]-taulukon
...
c koodannu viimes joskus 2 biljoonaa vuotta sitten, mutta pointterilla varmaankin onnistuu.
eli privatessa ois vaan pointteri int-tyyppiseen tietoon:
int *taulukko;
ja sitten konstruktorissa ois
this.taulukko = new int[n][m];
Tämä ei onnistu:
class MAT{
private:
int row;
int col;
double* mat;
public:
MAT::MAT(int i,int j):row(i),col(j){
mat=new double[i][j];
}
}
Heittää herjan:cannot convert
double(*)[((j-1) 1)] to double* in assignment
Tämä onnistuu:
class MAT{
private:
int row;
int col;
double* mat;
public:
MAT::MAT(int i,int j):row(i),col(j){
mat=new double[i];
}
}
HÄH?
Se ei onnistu sen takia, että mat on pointteri taulukoon. Eli muuta rivi "double *mat;" muotoon "double **mat;" niin voit myös tallettaa siihen kaksiuloiteisen taulukon.
Templatella voisi mennä vaikka näin:
template
class Luokka{
private:
T taulukko[imax][jmax];
public:
Luokka()
{
/* muista alustaa taulukko ... */
}
};
int main()
{
Luokka a;
return 0;
}