RAHUL
11-05-2006, 11:06
Hallo,
ich habe mich ein wenig in C++ reingefuchst,
aber bin wieder raus.
Ich habe von dem Gruppenübungsleiter eine Template Klasse
einer Matrix zur Verfügung gestellt bekommen,
muß mit der die Matrixmultiplikation durchführen.
Nun habe ich mehrere Funktionen, an die ich die Template Klasse
konstant übergeben will, .z.B
69: int Mat_x_Mat(TRMatrix &c, const TRMatrix & a, const TRMatrix & b)
70: {
71: if(a.GetCols()!=b.GetRows())
72: {
73: printf("Matrizen können nicht multipliziert werden!");
74: return -1;
75: }
76
77: for(int ctr1=0; ctr1 < c.GetRows();++ctr1)
78: {
79: for(int ctr2=0; ctr2 < c.GetCols();++ctr2)
80: {
81: for(int i=0; i < a.GetCols() ; ++i)
82: {
83: c(ctr1,ctr2)=c(ctr1,ctr2)+a(ctr1,i)*b(i,ctr2);
84: }
85 }
86: }
87: return 0;
88:}
Nun habe ich mit templates noch nie was gemacht und weiß nicht,
ob man da etwas noch beachten muß, aber ist das normalerweise nciht sauberer so, dass ich die Matrizen a und b als const übergebe?
Auf jeden Fall gibt mir der Compiler als Antwort:
MatrixMultiplikation.cpp:71: error: passing `const TRMatrix' as `this' argument of `const int TMatrix<T>::GetCols() [with T = double]' discards qualifiers
MatrixMultiplikation.cpp:71: error: passing `const TRMatrix' as `this' argument of `const int TMatrix<T>::GetRows() [with T = double]' discards qualifiers
Warum ist das so, ich meine ich habe die Memberfunction auch noch auf const geändert, aber wo ist das Problem, da ist doch nur eine logische Abfrage? Was ist der Denkfehler?
Hier noch die Memberfunction
const int GetRows() { return const rows;};
const int GetCols() { return const cols;};
Danke für die Antworten
Mfg
Rahul
ich habe mich ein wenig in C++ reingefuchst,
aber bin wieder raus.
Ich habe von dem Gruppenübungsleiter eine Template Klasse
einer Matrix zur Verfügung gestellt bekommen,
muß mit der die Matrixmultiplikation durchführen.
Nun habe ich mehrere Funktionen, an die ich die Template Klasse
konstant übergeben will, .z.B
69: int Mat_x_Mat(TRMatrix &c, const TRMatrix & a, const TRMatrix & b)
70: {
71: if(a.GetCols()!=b.GetRows())
72: {
73: printf("Matrizen können nicht multipliziert werden!");
74: return -1;
75: }
76
77: for(int ctr1=0; ctr1 < c.GetRows();++ctr1)
78: {
79: for(int ctr2=0; ctr2 < c.GetCols();++ctr2)
80: {
81: for(int i=0; i < a.GetCols() ; ++i)
82: {
83: c(ctr1,ctr2)=c(ctr1,ctr2)+a(ctr1,i)*b(i,ctr2);
84: }
85 }
86: }
87: return 0;
88:}
Nun habe ich mit templates noch nie was gemacht und weiß nicht,
ob man da etwas noch beachten muß, aber ist das normalerweise nciht sauberer so, dass ich die Matrizen a und b als const übergebe?
Auf jeden Fall gibt mir der Compiler als Antwort:
MatrixMultiplikation.cpp:71: error: passing `const TRMatrix' as `this' argument of `const int TMatrix<T>::GetCols() [with T = double]' discards qualifiers
MatrixMultiplikation.cpp:71: error: passing `const TRMatrix' as `this' argument of `const int TMatrix<T>::GetRows() [with T = double]' discards qualifiers
Warum ist das so, ich meine ich habe die Memberfunction auch noch auf const geändert, aber wo ist das Problem, da ist doch nur eine logische Abfrage? Was ist der Denkfehler?
Hier noch die Memberfunction
const int GetRows() { return const rows;};
const int GetCols() { return const cols;};
Danke für die Antworten
Mfg
Rahul