Ich baue meine eigene Matrix-Klasse, um meine C++ Verständnis zu festigen. Es ist templated, also kann ich eine int-Matrix oder einen Float oder eine boolesche Matrix haben. Ich wollte keine Kopie Konstruktor oder Zuweisungsoperator oder einen destructor implementieren, weil ich keine dynamischen Bauteilelemente haben gehen, aber wenn ich:C++ Zuweisung Operatorimplementierung in Vorlagenklasse
Matrix<float,3,4> mat1;
Matrix<int,45,45> mat2;
mat1 = mat2;
es gibt die folgende Fehlermeldung:
/Users/Jake/Dropbox/C++/test.cpp: In function ‘bool test1()’:
/Users/Jake/Dropbox/C++/test.cpp:23: error: no match for ‘operator=’ in ‘m2 = m1’
/Users/Jake/Dropbox/C++/Matrix.h:22: note: candidates are: Matrix<float, 3u, 4u>& Matrix<float, 3u, 4u>::operator=(const Matrix<float, 3u, 4u>&)
was, wenn die beiden Matrizen float oder beide int sind, ist es in Ordnung. Dimensionen müssen nicht übereinstimmen. Daher funktioniert der Standardzuweisungsoperator sehr gut, es sei denn, sie haben unterschiedliche Typen. So implementieren ich meinen eigenen Zuweisungsoperator:
template <class T, unsigned int rows, unsigned int cols>
template <class T2, unsigned int rows2, unsigned int cols2>
Matrix<T, rows2, cols2> & Matrix<T,rows,cols>::operator= (const Matrix<T2, rows2, cols2> & second_matrix){
unsigned int i,j;
for (i=0; i < rows2; i++){
for (j=0; j < cols2; j++){
data[i][j] = second_matrix(i,j);
}
}
this->_rows = rows2;
this->_cols = cols2;
return *this;
}
Dies funktioniert, wenn sie unterschiedliche Typen sind, aber gleiche ABMESSUNGEN aber die Werte in den zweiten von dem zweiten Typ zum ersten umgewandelt. Meine Frage ist, wie kann ich es einrichten, so dass sie verschiedene Arten und unterschiedliche Dimensionen sein können, und nur dieses auf den zweiten oder eine Kopie des zweiten Punktes setzen?
es wurde bereits erklärt, dass Sie nicht, C++ verhindert Ihnen die Durchführung von Operationen auf Matrizen, die nicht in der Matrix-Theorie existiert - Sie können keine Matrizen zuweisen, die Dimensionen sind nicht identisch. –