什么意思是“错误:重载'运算符*'必须至少有一个类或枚举类型的参数”

时间:2015-07-27 09:24:43

标签: c++ templates

我正在编写一个数学库。我使用C ++模板来完成它。

有两种代码。一个可以吗?但另一个是坏事?为什么呢?

错误日志:

  

../ test_vector / main.cpp:98:10:错误:重载'operator *'必须至少有一个类或枚举类型的参数   内联T运算符*(float s,const T& t)

#include <cmath>

namespace gqm
{

template <typename T>
struct vector2 {
    vector2() {}
    vector2(T x, T y) : x(x), y(y) {}
    vector2 operator*(float s) const
    {
        return vector2(x * s, y * s);
    }
    T x;
    T y;
};


//it works good!
template <typename T>
inline T operator*(float s,const T &t)
{
    return t.operator*(s);
}

//it do not works!Why?
//template <typename T>
//inline T operator*(float s,const T &t)
//{
//    return t*s;
//}

typedef vector2<float> vec2;

}//namespace gqm

int main()
{
    gqm::vec2 v2 = 0.5 * gqm::vec2(1.0,1.0);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您不能重载此运算符,因为两者都具有相同的参数并返回相同的类型。 如果你评论第一个,第二个也可以。