gpt4 book ai didi

c++ 运算符重载 - 我实际返回的是什么操作数类型?

转载 作者:行者123 更新时间:2023-12-01 14:44:14 41 4
gpt4 key购买 nike

我正在尝试为我的 Vector 类重载一些运算符,但在尝试断言(v+v == v*2)时出现以下错误:

[错误] 'operator==' 不匹配(操作数类型为 'Vector' 和 'Vector')。

使用 assert(v==v) 时,该函数可以正常工作,而且我还可以使用 + 和 * 运算符创建新 vector 。

class Vector{

private:
vector<double> arr;

friend bool operator ==( Vector &src, Vector &src2) {
int z = src.size();
if (z != src2.size()){
return false;
}

for (int i = 0; i < src.size(); i++){
double p = src.at(i);
if (p != src2.at(i)){
return false;
}
};
return true;
};

friend Vector operator +(Vector &src, Vector &src2) {
Vector TEMP = src;
for (int i = 0; i < src.size(); i++){
TEMP.arr[i] = src.arr[i] + src2.arr[i];
}
return TEMP;
};

friend Vector operator *(Vector &src, const int x) {
Vector TEMP = src;
for (int i = 0; i < src.size(); i++){
TEMP.arr[i] = src.arr[i] *x;
}
return TEMP;
};

};


int main() {

double data1[] = {3.4, 4.4, 6.0};
Vector v(sizeof(data1)/sizeof(double), data1);
assert(v == v);
assert(v + v == v * 2);


};

最佳答案

你声明了operator ==的参数类型作为对非常量的左值引用。但两者都是operator +operator *按值返回,它们返回的是右值;不能绑定(bind)到对非常量的左值引用。

可以更改operator==的参数类型对 const 的左值引用,它可以绑定(bind)到右值。 (并且它们不需要是对非常量的左值引用,因为 operator== 不应该执行修改。)例如

friend bool operator ==(const Vector &src, const Vector &src2) {
...
}

关于c++ 运算符重载 - 我实际返回的是什么操作数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785408/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com