[英]Overloading Operators in C++ is giving me an error
當我嘗試在main.cpp中使用此行時:
m3.array = m1.array+m2.array;
其中m3,m1和m2都是Matrix類類型的對象,帶有int [3] [3]數組-我不斷收到一個錯誤,該錯誤處理了int [3] [3]和int [ 3] [3]運算符“ +”。 我不知道確切的錯誤,因為我不在電腦上編譯程序。
這是我擁有的matrix.cpp:
#include <iostream>
#include <string>
#include "matrix.h"
using namespace std;
Matrix::Matrix()
{
m1.array = 0;
}
istream& opeator >>(istream& inp, Matrix& m1)
{
int i, j;
for (i = 0; i < 3;i++)
{
for (j=0; j < 3;j++)
{
inp >> m1.array[i][j];
}
}
return inp;
}
ostream& operator <<(istream& outp, Matrix& m1)
{
int i, j;
for (i = 0;i<3;i++)
{
for (j = 0;j<3;j++)
{
out<<m1.array[i][j]<<" "<<endl;
}
}
return outp;
}
Matrix operator + (const Matrix& m1, const Matrix& m2)
{
Matrix answer;
int i,j;
for (i = 0;i<3;i++)
{
for (j = 0;j<3;j++)
{
answer.array[i][j] = m1.array[i][j] + m2.array[i][j];
}
}
return answer;
}
Matrix operator - (const Matrix& m1, const Matrix& m2)
{
Matrix answer;
int i, j;
for (i = 0;i<3;i++)
{
for (j = 0;j<3;j++)
{
answer.array[i][j] = m1.array[i][j] - m2.array[i][j];
}
}
return answer;
}
Matrix operator * (const Matrix& m1, const matrix& m2)
{
Matrix answer;
int i, j, k;
for (i = 0;i<3;i++)
{
for (j = 0; j<3;j++)
{
for (k = 0; k<3;k++)
{
answer.array[i][j] = m1.array[i][k] + m2.array[k][j];
}
}
}
return answer;
}
和matrix.h:
#ifndef MATRIX_H
#define MATRIX_H
using namespace std;
class Matrix
{
public:
Matrix();
friend istream& operator >>(istream&, Matrix&);
friend ostream& operator <<(ostream&, const Matrix&);
friend Matrix& operator +(const Matrix&, const Matrix&);
friend Matrix& operator -(const Matrix&, const Matrix&);
friend Matrix& operator *(const Matrix&, const Matrix&);
int array[3][3];
};
#endif
Matrix operator + (const Matrix& m1, const Matrix& m2)
這告訴計算機如何添加兩個Matrix
對象,做得很好。
m3.array = m1.array+m2.array;
m1
和m2
是Matrix
對象,但m1.array
不是。 那是一個int[3][3]
對象。 幸運的是,修復非常簡單:
m3 = m1 + m2;
成員array
的類型為int[3][3]
。 您正在嘗試添加這兩個在C ++中沒有意義的多維數組。
我認為您真正想要的是:
m3 = m1 + m2;
這將調用您的重載運算符。
還有一點令人懷疑的是您的朋友聲明和您的實際定義不匹配。 返回類型不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.