いくつかのユニオンとそれらのユニオンのインライン関数を定義しようとすると、VC++2010 Express で興味深いエラーが発生します。多くのプログラムで使用する静的ライブラリを構築しようとしています。
typedef union
{
double data[3];
struct { double x, y, z; };
} VECTOR3;
inline VECTOR3 _V3(double x, double y, double z)
{
VECTOR3 vec = { x, y, z };
return vec;
}
typedef union
{
double data[9];
struct { double x0, y0, z0, x1, y1, z1, x2, y2, z2; };
} MATRIX3;
inline MATRIX3 _M3(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2)
{
MATRIX3 mat3 = { x0, y0, z0, x1, y1, z1, x2, y2, z2 };
return mat3;
}
このコードはエラー「C2371: 再定義; 異なる基本型」を生成していますが、これらの共用体が定義されているのはここだけです。
インライン関数は、「C2084: 関数 'FunctionName(ArgumentType)' には既に本体があります」というエラーが発生しますが、他の本体は定義されていません。このファイル、または参照されているファイルのいずれかです。
さらに、ここに示されているようなコードは、別のアプリケーションの SDK にあります。また、その SDK を使用したビルドでは、これらのエラーは発生しません。
私の検索はどれも役に立ちませんでした。