gpt4 book ai didi

c++ - 重载模板运算符*

转载 作者:行者123 更新时间:2023-11-30 04:28:08 24 4
gpt4 key购买 nike

// vec2.h
template<class v_float=float>
class vec2
{
public:
v_float m[2];
};

template<class v_float>
vec2<v_float> operator* (v_float & f, vec2<v_float> & v);

template<class v_float>
vec2<v_float> vec2<v_float>::operator* (v_float & f, vec2 & v)
{
return vec2(v.m[0]*f, v.m[1]*f);
}

我想为上面的模板类vec2重载operator*,但是上面的代码给了我以下错误:vec2.cpp:68: error: 'vec2 vec2::operator*(v_float&, vec2&)' must take零个或一个参数

如何为模板类重载运算符*(float, vec2)?注意operator*的参数个数必须是两个。

最佳答案

我认为问题出在这个模板成员函数中:

template<class v_float>
vec2<v_float> vec2<v_float>::operator* (v_float & f, vec2 & v)
{
return vec2(v.m[0]*f, v.m[1]*f);
}

由于您在这里将 operator * 定义为成员函数,因此 C++ 自动假定接收者对象是操作数之一。这意味着如果你想定义乘法,你应该只定义一个接受一个参数的函数,即乘法的右侧(因为左侧将是接收者对象)。

我认为您打算将其作为一个免费功能,如下所示:

template<class v_float>
vec2<v_float> operator* (v_float & f, vec2<v_float> & v)
{
return vec2(v.m[0]*f, v.m[1]*f);
}

希望这对您有所帮助!

关于c++ - 重载模板运算符*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406098/

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