[ mr10x505 @ 14.12.2011. 09:08 ] @
Može li mi neko molim vas objasniti kako se u C++ prenosi MATRICA po referenci jer cu vise poludeti od gluposti i grešaka koje mi se javljaju.
Recimo, hoću da formiram klasu koja ce obrađivati matrice koje se naaze u main-u. Imam matricu u mainu i treba da je prosledim klasi. Kod mene, main (javlja mi se greska kod naredbe mat=mat1;) izgleda ovako:

Code:

int main(){
    double **mat;
    double mat1[2][2] = {1, 2, 3, 4};
    int t=2, g=2;

    mat=mat1;

    MyMatrix m(t, g, mat);

        m.print();

    _getch();
}


Klasa MyMatrix koja treba da učita matricu mat1 izgleda ovako:

Code:

class MyMatrix{
private:
    int columns;
    int rows;
    double *values;

public:
    MyMatrix::MyMatrix(int col, int row,double**& val){
        columns=col;
        rows=row;
        values=new double[columns*rows];


        for(int i=0;i<rows*columns;i++){
            values[i]=*val[i];
        }
    }

    void MyMatrix::print(){
        for(int i=0;i<rows;i++){
            for(int j=0;j<columns;j++){
                cout<<values[i*columns+j]<<"\t";
            }
            cout<<"\n";
        }
    }
};


Unapred vam se zahvaljujem na uloženom trudu, ja vise ideja nemam sve sam probao :)

[Ovu poruku je menjao mr10x505 dana 14.12.2011. u 11:01 GMT+1]
[ Mihajlo Cvetanović @ 14.12.2011. 09:26 ] @
Opiši detaljno problem. Ako se kompajler žali onda stavi ovde kompletnu poruku kompajlera. Ako izvršenje programa nije očekivano onda napiši šta očekuješ i šta dobijaš.
[ mr10x505 @ 14.12.2011. 09:57 ] @
Citat:
mr10x505: Može li mi neko molim vas objasniti kako se u C++ prenosi MATRICA po referenci jer cu vise poludeti od gluposti i grešaka koje mi se javljaju.
Recimo, hoću da formiram klasu koja ce obrađivati matrice koje se naaze u main-u. Imam matricu u mainu i treba da je prosledim klasi. Kod mene, main (javlja mi se greska kod naredbe mat=mat1;) izgleda ovako:

Code:

int main(){
double **mat;
double mat1[2][2] = {1, 2, 3, 4};
int t=2, g=2;

mat=mat1;

MyMatrix m(t, g, mat);

m.print();

_getch();
}


Klasa MyMatrix koja treba da učita matricu mat1 izgleda ovako:

Code:

class MyMatrix{
private:
int columns;
int rows;
double *values;

public:
MyMatrix::MyMatrix(int col, int row,double**& val){
columns=col;
rows=row;
values=new double[columns*rows];


for(int i=0;i<rows*columns;i++){
values[i]=*val[i];
}
}

void MyMatrix::print(){
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
cout<<values[i*columns+j]<<"\t";
}
cout<<"\n";
}
}
};


Unapred vam se zahvaljujem na uloženom trudu, ja vise ideja nemam sve sam probao :)


Za početak bi hteo samo da pozovem konstruktor, a zatim da pozovem metodu .print(); sa kojom bih stampao tu matricu.
Greške mi javlja u liniji u main-u gde stoji: mat=mat1;
Greške kažu sledeće:
" error C2440: '=' : cannot convert from 'double [2][2]' to 'double **' " i
" IntelliSense: a value of type "double (*)[2]" cannot be assigned to an entity of type "double **" "
[ Mihajlo Cvetanović @ 14.12.2011. 11:19 ] @
double mat2[2][2] može da se svede na pointer na niz elemenata tipa double, a pointer na niz je isto što i pointer na prvi element niza. Drugim rečima double mat2[2][2] može da se svede na double*, a double** je greška. Zameni double** mat sa double* mat.