我试图用C ++编译我的程序,但是g ++在VS编译中看到很多错误,在VS编译中没有任何警告。 请帮忙。
修改。 operator =的定义: Matrix& Matrix :: operator =(Matrix& mat){
delete [] tab;
hei = mat.hei;
tab = new Wektor[hei];
for (int i = 0; i < hei; i++){
tab[i] = mat.Tab()[i];
}
return *this;
}
功能定义有问题: void PlusMat(Matrix * lista,int imat){
Matrix add;
if (imat < 2){
cout << "At least 2 matricies!";
return;
}
if ( ((((lista[0]).Tab()[0]).Len()) != (((lista[1]).Tab()[0]).Len())) || (((lista[0]).Hei()) != ((lista[1]).Hei()))){
cout << "Matrices must have the same dimensions!";
return;
}
cout << lista[0];
cout << " + \n";
cout << lista[1];
cout << " = \n";
add = ((lista[0]) + (lista[1]));
// ^ problem
cout << add;
}
编辑2:
我更正了这个功能,但现在是另一个问题:
Wektor &Wektor::operator=(const Wektor &wek) {
delete [] tab;
len = wek.len;
tab = new int[len];
for (int i = 0; i < len; i++)
tab[i] = wek.Tab()[i];
// ^ ^
return *this;
}
该对象具有与成员函数对象类型不兼容的类型限定符:const Wektor 对不起,这是我在这里的第一篇文章。
答案 0 :(得分:2)
有很多问题,但显示的是您的代码
Wektor &operator=(Wektor &wek);
但操作按值返回Wektor
。
编译器无法转换Wektor
中的Wektor&
,因为结果是临时的,参数是非const引用。
将作业参数更改为
Wektor &operator=(const Wektor &wek);
将解决这个问题(但是在此代码之前有很多其他问题)。
如果您不理解为什么临时不能转换(绑定)到非const引用,那么您可能应该先阅读更多关于C ++的内容,而不是编写代码并尝试编译它。只需选择一个good book并首先阅读封面封面,事情会轻松一千倍。
C ++不是一种可以通过实验学习的语言,原因很多,无论你多么聪明(实际上过于聪明都会使情况恶化,因为有时候正确的答案只是因为历史原因而显然是不合逻辑的)。 p>