C ++ typedef union编译错误

时间:2013-09-17 21:48:35

标签: c++ visual-c++ compiler-errors

当我尝试为这些联合定义几个联合和内联函数时,我在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:function'FunctionName(ArgumentType)'已经有一个主体”但是没有定义其他主体。在此文件中,或在引用的任何文件中。

此外,此处显示的代码位于另一个应用程序的SDK中。使用该SDK构建不会产生任何这些错误。

我的搜索都没有任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为此代码位于头文件(.h)中。

您需要include guards

#ifndef YOUFILE_h__
# define YOUFILE_h__

// Your code

#endif // !YOUFILE_h__

避免在同一translation unit中多次包含同一文件。

如果在同一源文件中多次(有时通过其他标题)包含此头文件,那么除非您有包含警卫,否则将不止一次定义您的联合。