Часть кода из моей математической библиотеки C ++ перестала работать с момента обновления до XCode 5.0.
Он объявляет некоторые функции перегрузки операторов, которые реагируют по-разному в зависимости от передаваемых типов параметров. Вот код (все в файле .h):
#ifndef __RMKit__RMVector3f__
#define __RMKit__RMVector3f__
#include <stdbool.h>
#include <math.h>
#ifdef __cplusplus
extern "C" {//start extern "C"#endif
union _RMVector3f {
struct {float x,y,z;};
struct {float r,g,b;};
struct {float s,t,p;};
float v[3];
};
typedef union _RMVector3f RMVector3f;
#pragma mark - math operator overloads prototypes
#ifdef __cplusplus //only declare operator overloads if using C++
static __inline__ RMVector3f operator + (RMVector3f lhs, RMVector3f rhs);
static __inline__ RMVector3f operator + (RMVector3f lhs, float rhs);
static __inline__ RMVector3f operator - (RMVector3f lhs, RMVector3f rhs);
static __inline__ RMVector3f operator - (RMVector3f lhs, float rhs);
#pragma mark - math operator overload implementations
static __inline__ RMVector3f operator + (RMVector3f lhs, RMVector3f rhs)
{
RMVector3f tmp;
tmp.x = lhs.x+rhs.x;
tmp.y = lhs.y+rhs.y;
tmp.z = lhs.z+rhs.z;
return tmp;
}
static __inline__ RMVector3f operator + (RMVector3f lhs, float rhs)
{
RMVector3f tmp;
tmp.x = lhs.x+rhs;
tmp.y = lhs.y+rhs;
tmp.z = lhs.z+rhs;
return tmp;
}
static __inline__ RMVector3f operator - (RMVector3f lhs, RMVector3f rhs)
{
RMVector3f tmp;
tmp.x = lhs.x-rhs.x;
tmp.y = lhs.y-rhs.y;
tmp.z = lhs.z-rhs.z;
return tmp;
}
static __inline__ RMVector3f operator - (RMVector3f lhs, float rhs)
{
RMVector3f tmp;
tmp.x = lhs.x-rhs;
tmp.y = lhs.y-rhs;
tmp.z = lhs.z-rhs;
return tmp;
}
#endif
#ifdef __cplusplus
}//end extern "C"#endif
#endif /* defined(__RMKit__RMVector3f__) */
Компилятор (LLVM 5.0) выдает мне такие ошибки, как:
Conflicting types for 'operator+'
Conflicting types for 'operator-'
Что я могу сделать, чтобы исправить эту проблему?
Задача ещё не решена.
Других решений пока нет …