c++;错误:类型为';矩阵*';和';矩阵*';到二进制';操作员+'; 我有一个关于C++的考试。以下为详细说明: 矩阵*m2=新矩阵(3,4,9); → 带9的3x4矩阵 矩阵运算→ m2=m2+m3
我试图求m2和m3之和,并将m2相加。但有一个错误:“矩阵*”和“矩阵*”类型的操作数对二进制“运算符+”无效 main.cpp:c++;错误:类型为';矩阵*';和';矩阵*';到二进制';操作员+'; 我有一个关于C++的考试。以下为详细说明: 矩阵*m2=新矩阵(3,4,9); → 带9的3x4矩阵 矩阵运算→ m2=m2+m3,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,我试图求m2和m3之和,并将m2相加。但有一个错误:“矩阵*”和“矩阵*”类型的操作数对二进制“运算符+”无效 main.cpp: int main(){ Matrix *m2= new Matrix(3,4,9); Matrix *m3= new Matrix(3,4,2); m2= m2+m3; return 0; } 矩阵h: class Matrix{ private: int x,y;
int main(){
Matrix *m2= new Matrix(3,4,9);
Matrix *m3= new Matrix(3,4,2);
m2= m2+m3;
return 0;
}
矩阵h:
class Matrix{
private:
int x,y;
vector<vector <int> > matris;
public:
Matrix(int row,int col,int z);
Matrix* operator+(Matrix* no2);
};
类矩阵{
私人:
int x,y;
向量矩阵;
公众:
矩阵(int行,int列,int z);
矩阵*运算符+(矩阵*no2);
};
Matrix.cpp:
Matrix::Matrix(int row,int col, int z){
Matrix::x=row;
Matrix::y=col;
for(int i=0;i<x;i++){
matris.push_back(vector <int>(y));
}
for(int i=0;i<Matrix::x;i++){
for(int j=0;j<Matrix::y;j++){
Matrix::matris[i][j]=z;
}
}
}
Matrix* Matrix::operator +(Matrix* no2){
Matrix* temp = new Matrix(this->x,this->y,0);
for(int i=0;i<this->x;i++){
for(int j=0;j<this->y;j++){
temp->matris[i][j]=this->matris[i][j]+ no2->matris[i][j];
}
}
return temp;
}
矩阵::矩阵(int行,int列,int z){
矩阵::x=行;
矩阵::y=col;
对于(inti=0;imatris[i][j]=this->matris[i][j]+no2->matris[i][j];
}
}
返回温度;
}
您编写的运算符可以称为
// this is only for demonstration, not real code!
Matrix *m_p1;
Matrix *m_p2;
Matrix m3;
//...
m_p2 = m3 + m_p1;
// exactly the same as
m_p2 = m3.operator+(m_p1);
但是,
运算符+
应该将常量矩阵&
作为参数,并返回矩阵
。只需从代码中删除所有指针,它就几乎正确了。让我们看看您对运算符+
的声明
矩阵*运算符+(矩阵*no2);
实际上,operator+
是一个成员函数,因此只能通过对象调用它
因此调用m2+m3
转换为m2.operator+(m3)
,但在代码中,m2是指针,此语法无效
操作员希望左侧有一个对象,右侧有一个指针
在m2+m3
中,两者都是指针,没有为其定义合适的运算符
解决方案
工作少(丑)
m2=(*m2)+m3;
在这里,您将取消对m2指向的对象的引用
更多的工作(不那么难看)
m2=m2+m3;
但在此之前,您必须为全局(类外)的2个指针定义+
矩阵*运算符+(矩阵*m1,矩阵*m2){
//做事
}
你必须和公众/朋友一起玩
我理解这是为了类,但除非你真的需要重新考虑每一种只使用对象的方法,否则你不应该使用指针
在m2=m2+m3
中存在内存泄漏(糟糕的是,内存被占用),您正在分配m2新位置,而没有删除旧的指针对象。因此,有一个矩阵对象(>60-90)字节丢失,您无法访问
不使用指针就可以很容易地做到这一点,你会学到很多。注意你的截止日期。希望它能有所帮助。你为什么在这里使用指针?这回答了你的问题吗?@Axalo不,它没有。问题是指针不是全局的vs成员
矩阵*m2=新矩阵(3,4,9)
--不。去掉所有的指针,如果不是所有的问题都会得到解决的话,那么大部分问题都会得到解决。没有任何理由在你的程序中有一个新的,因为默认情况下Matrix
是可以复制的,没有任何问题。如果它需要访问私有数据,他可以在类中声明它为friend Matrix*operator+(矩阵*m1,矩阵*m2){/*do stuff*/}
函数声明将以类和友元作为前缀,而定义应该在外部,在定义之前不需要前缀友元。