我想寫一個cpp程序來做與運算符重載的矩陣運算。使用賦值運算符導致編譯器錯誤
我的類矩陣具有以下變量:
int m,n // order of the matrix
int **M;
起初,我有一個構造函數和析構函數使用new和delete操作符來分配和**中號釋放內存。我也有過載+, - 和*運算符的函數。但是當我運行程序時,我得到了垃圾值作爲結果。此外,在運行時,我得到一個錯誤(檢測到glibc)。
在這裏的類似問題告訴我,我應該添加一個「深拷貝」二維數組的複製構造函數。我也是這樣做的。但同樣的問題依然存在。
所以我給overload =運算符添加了一個函數。現在,無論何時使用'='運算符,我都會收到編譯時錯誤(對於調用'Matrix :: Matrix(Matrix)'的匹配函數。
這裏是我的功能:
拷貝構造函數
Matrix(Matrix& other) {
m=other.m;
n=other.n;
M= new int *[m];
for(int i=0;i<m;i++)
M[i] = new int[n];
//deep copying matrix
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
M[i][j]=other.M[i][j];
}
超載*:
Matrix Matrix::operator*(Matrix A) {
Matrix pro(m,A.n);
for(int i=0;i<m;i++)
for(int j=0;j<A.n;j++) {
pro.M[i][j]=0;
for(int k=0;k<n;k++)
pro.M[i][j]+=(M[i][k]*A.M[k][j]);
}
return pro;
}
超載=::
Matrix Matrix::operator=(Matrix a) {
m=a.m;
n=a.n;
/*
M=new int* [m];
for(int i=0;i<m;i++) //I also tried allocating memory in this function
M[i]=new int[n];
*/
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
M[i][j]=a.M[i][j];
return *this;
}
在main()
Matrix M1(m,n);
Matrix M2(p,q);
//inputting both matrices
Matrix M3(m,n);
Matrix M4(m,q);
M3 = M1 + M2; // Compile Time Error here...
M3.show();
M3 = M1 - M2; //...here...
M3.show();
M4 = M1*M2; //...and here.
M4.show();
編譯時錯誤:調用的Matrix矩陣::(矩陣)「
'矩陣(矩陣&)'我強烈懷疑你想要那樣。也許用'const'? –
您還應該使用'const&'作爲其他函數中的參數,以避免不斷複製矩陣。 –
'Matrix Matrix :: operator =(Matrix a)... return * this;'沒有錯?它需要一個Matrix(Matrix)構造函數 – user3125280