所以即時通訊設計一個程序,使用向量的int和im向量創建一個矩陣試圖超載+,以便我可以將兩個矩陣一起添加。這是我第一次讓運營商超負荷運轉,並且遇到了一些麻煩。我實現了運算符+,當我使用測試程序類運行它時,出現分段錯誤,它不告訴我在哪裏。所以我增加了cout來查看它出錯的地方;它發生在我調用matrix2 = matrix1 + matrix2時。我不知道有什麼錯誤意味着什麼,或者我做錯了什麼。重載運算符+和分割錯誤C++
Matrix.cpp(其中過載成員函數):
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;
}
TesterClass.cpp:
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();
'for(int j = column; j <0; j - )'???你確定'j <0'?你不應該從'j = column-1'開始嗎? – Christophe 2014-11-02 22:57:02
此外,newRow似乎只是附加到每行。所以每一行,如果它們被設定,會變得越來越大。 (另外,你幾乎可以肯定要使用const引用,而不是將參數複製到+)。或者利用這個事實,即運算符+的參數將成爲副本,並在添加到它之後將其返回。 'for()for()m [i] [j] + = this [i] [j];' – perh 2014-11-02 22:58:27
您確定在測試儀類中添加矩陣和m2的行數和列數相同?你確定你已經正確定義了operator =()? – Christophe 2014-11-02 23:07:13