C++ 重载运算符+;和分段故障C++;
所以我设计了一个程序,用int向量的向量创建一个矩阵,我试图重载+以便我可以把两个矩阵加在一起。这是我第一次让操作员超载,我有点麻烦。我实现了operator+,当我使用tester类运行它时,我得到了一个分段错误,它没有告诉我在哪里。所以我加了cout,看看哪里出了问题;它发生在我调用matrix2=matrix1+matrix2时。我不知道这是什么意思,也不知道我做错了什么 Matrix.cpp(其中重载成员函数为):C++ 重载运算符+;和分段故障C++;,c++,C++,所以我设计了一个程序,用int向量的向量创建一个矩阵,我试图重载+以便我可以把两个矩阵加在一起。这是我第一次让操作员超载,我有点麻烦。我实现了operator+,当我使用tester类运行它时,我得到了一个分段错误,它没有告诉我在哪里。所以我加了cout,看看哪里出了问题;它发生在我调用matrix2=matrix1+matrix2时。我不知道这是什么意思,也不知道我做错了什么 Matrix.cpp(其中重载成员函数为): 矩阵::运算符+(矩阵m){ 矢量mRow; 向量纽罗; 矩阵newM(
矩阵::运算符+(矩阵m){
矢量mRow;
向量纽罗;
矩阵newM(行、列);
for(int i=0;ii在加法的内部循环中发现一个错误。for循环初始化j
到列
,但应该从j=column-1
开始。这将在访问mRow[j]
时导致segfault。此外,条件也应该更改,为for(j=column-1;j>-j)
for(int j=column;jAlso,newRow似乎只是为每一行追加。因此,如果设置了每一行,它们将变得越来越大。(此外,您几乎肯定希望使用常量引用,而不是将参数复制到+)。或者利用运算符+的参数将是一个副本的事实,并在添加到它之后返回它。for()for()m[i][j]+=this[i][j];
并且您确信在tester类中add、matrix和m2具有相同的行数和列数?并且您确定已正确定义运算符=()?@perh在将newRow添加到metrix@Christophe你我确信它的大小和我硬编码的大小一样,而且不是为了调试程序。但是,这不会导致崩溃,因为内部循环总是被完全跳过(i=正;i
Matrix Matrix::operator+(Matrix m){
vector<int> mRow;
vector<int> newRow;
Matrix newM(row, column);
for(int i =0; i<row; i++){
mRow = m.getRow(i);
for (int j=column; j<0; j--){
newRow.push_back(matrix[i][j]+mRow[j]);
}
newM.setRow(newRow,i);
}
return newM;
}
Matrix m2(rowVec.size(), colVec.size());
rowVec = matrix.getRow(1);
cout <<"Made new matrix" <<endl;
for (int i=0; i <= row-1; i++){
cout <<"for l" <<endl;
m2.setRow(rowVec,i);
}
cout <<"for done" <<endl;
Matrix add(row,column);
add = matrix + m2; #Program stops here
cout <<"added" <<endl;
add.output();