我正在将游戏移植到 OS X ,它使用运算符重载 __ m128 类型:
__forceinline __m128 operator - ( __m128 a, __m128 b )
{
return _mm_sub_ps ( a, b );
}
__forceinline __m128 operator * ( __m128 a, __m128 b )
{
return _mm_mul_ps ( a, b );
}
Apple GCC v4.2.1 给了我以下错误:
错误:'float vector operator-(float vector ,float vector )'必须具有类或枚举类型的参数
错误:'float vector operator *(float vector ,float vector )'必须具有类或枚举类型的参数
我找到了link,将此类错误描述为 GCC错误,已在v4.0中解决...
现在我完全迷失了......请帮我解决这个问题...
答案 0 :(得分:1)
我正在使用g ++ 4.6.1并在类似情况下发现相同的错误消息,当两个参数都是内置类型时会发生:
algo operator +(const char * a,double b); 算法运算符+(double a,const char * b);
我理解重新定义+(int,int)是很棘手的,因为编译器依赖于它来进行计算,编译时计算出现,而不是运行时,因此您提供的代码在编译时不可用稍后在运行时,数据已经计算完毕。
太糟糕了我们不能这样做,只要类型不同(我的情况就是这样)就应该允许内置类型,对于那种情况,编译器没有默认答案。
对于案例+(int,int)我认为由于上面的解释,它永远不会被允许。除非编译器接受某种参数以将该计算结果留给运行时(并且我还没有检查那种参数)。我认为类似的事情发生在花车上。