我覆盖了添加操作,因此我可以添加我的struct Vec3
的两个向量// addition
Vec3 operator+(Vec3<T> &other) {
return Vec3(this->x + other.x, this->y + other.y, this->z + other.z);
}
// product with one scalar
Vec3 operator*(float scalar) {
return Vec3(this->x * scalar, this->y * scalar, this->z * scalar);
}
Vec3只有T型的三个属性。
使用它时T是浮点数,我执行此代码:
vec temp = vecOne * skalarOne + vecTwo * scalarTwo;
我收到此错误:
二元运算符&#39; +&#39;不能应用于类型的表达式 &#39;祈祷:: VEC 3&#39;并且&#39;祈祷:: Vec3&#39;
如果先计算乘法并将结果保存在向量中然后再进行向量加法,我就不会收到此错误。
任何人都有任何想法?谢谢!
答案 0 :(得分:5)
您需要将功能签名更改为
Vec3 operator+(const Vec3<T> &other) const
&amp; c。,否则匿名临时无法绑定到它。
答案 1 :(得分:0)
你应该像这样返回对vec3的引用:
// addition
Vec3 operator+(const Vec3& other) {
return { x + other.x, y + other.y, z + other.z };
}
// product with one scalar
Vec3 operator*(float scalar) {
return { x * scalar, y * scalar, z * scalar };
}
编辑:这是我完整的可运行解决方案,如果上面的修复不适合你。
template <typename T>
class Vec3 {
public:
Vec3(T x, T y, T z) : x(x), y(y), z(z) {}
T x;
T y;
T z;
// addition
Vec3 operator+(const Vec3<T>& other) {
return { x + other.x, y + other.y, z + other.z };
}
// product with one scalar
Vec3 operator*(float scalar) {
return { x * scalar, y * scalar, z * scalar };
}
};
int main() {
Vec3<float> a(2, 2, 2);
Vec3<float> b(1, 2, 3);
float num = 3;
Vec3<float> c = a + b;
Vec3<float> d = a * num;
Vec3<float> e = a * num + b * num;
}