operator =有什么问题

时间:2014-05-06 21:12:19

标签: c++

我试图用C ++编译我的程序,但是g ++在VS编译中看到很多错误,在VS编译中没有任何警告。 请帮忙。

Code What g++ speak

修改。 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 对不起,这是我在这里的第一篇文章。

1 个答案:

答案 0 :(得分:2)

有很多问题,但显示的是您的代码

Wektor &operator=(Wektor &wek);

但操作按值返回Wektor

编译器无法转换Wektor中的Wektor&,因为结果是临时的,参数是非const引用。

将作业参数更改为

Wektor &operator=(const Wektor &wek);

将解决这个问题(但是在此代码之前有很多其他问题)。

如果您不理解为什么临时不能转换(绑定)到非const引用,那么您可能应该先阅读更多关于C ++的内容,而不是编写代码并尝试编译它。只需选择一个good book并首先阅读封面封面,事情会轻松一千倍。

C ++不是一种可以通过实验学习的语言,原因很多,无论你多么聪明(实际上过于聪明都会使情况恶化,因为有时候正确的答案只是因为历史原因而显然是不合逻辑的)。 p>