Je vais avoir ce problème bizarre: quand mon programme atteint cette méthode:Valeur de retour de vecteur problématique - pas vraiment mise à jour?
//Returns the transpose matrix of this one
RegMatrix RegMatrix::transpose() const{
RegMatrix result(numCol,numRow);
int i,j;
for(i=0;i<numRow;++i)
for(j=0;j<numCol;++j){
result._matrix[j][i] = _matrix[i][j];
}
return result;
}
il bloque tout à coup ...
Quand je l'ai couru avec mon débogueur VS, il semblait que tout va bien, la nouvelle matrice a été rempli avec les valeurs pertinentes, jusqu'à la ligne return result;
qui, pour une raison mystérieuse a retourné un vecteur de matrice vide.
Où est-ce que je vais mal ??
Voici mon implémentation pour le constructeur de copie:
//CCtor of RegMatrix
RegMatrix::RegMatrix(const RegMatrix &other): numRow(other.getRow()), numCol(other.getCol()){
//Create
_matrix = vector<vector<MyDouble> >(other.getRow());
int i,j;
for(i=0; i < numRow; i++)
_matrix[i] = vector<MyDouble>(other.getCol());
//Copy Matrix
for(i=0;i<numRow; ++i){
for(j=0;j<numCol; ++j){
_matrix[i][j] = other._matrix[i][j];
}
}
}
Mon opérateur d'affectation mise en œuvre:
//RegMatrix = RegMatrix
RegMatrix& RegMatrix::operator=(const RegMatrix rhs){
assert(numRow == rhs.getRow() && numCol == rhs.getCol());
if(*this != rhs){
int i,j;
for(i=0;i<numRow;++i)
for(j=0;j<numCol;++j){
_matrix[i][j] = rhs._matrix[i][j];
}
}
return *this;
}
À quoi ressemble votre constructeur de copie? –
Votre constructeur de copie fait beaucoup et beaucoup de copie inutile (voir la réponse de PigBen), mais à la fin cela devrait fonctionner. Je peux imaginer le code va comme 'RegMatrix transposée = someMatrix.transpose();' si le suspect est à côté de votre opérateur d'affectation –