C++ typedef union 编译错误

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

当我尝试为这些 union 定义几个 union 和内联函数时,我在 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:重新定义;不同的基本类型”,但这是唯一定义这些 union 的地方。

内联函数产生错误“C2084:函数‘FunctionName(ArgumentType)’已经有一个主体”但没有定义其他主体。在这个文件中,或在任何引用的文件中。

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

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

最佳答案

我想这段代码在头文件 (.h) 中。

你需要有 include guards :

#ifndef YOUFILE_h__
# define YOUFILE_h__

// Your code

#endif // !YOUFILE_h__

它避免了在同一个 translation unit 中多次包含同一个文件.

如果这个头文件在同一个源文件中被多次包含(有时通过其他头文件),那么你的 union 将被定义不止一次,除非你有包含守卫。

关于C++ typedef union 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860484/

相关文章:

c++ - 为什么原始指针值被覆盖/超出范围

c++ - waitpid 和 pthread_cond_wait(3)

c++ - QTreeView 标题

c++ - Qt : Efficiently handle QGraphicsItems that have "lots of pixmaps"? (RTS)

c++ - 我不明白的模板方法中的语法错误

c++ - 急需 _doserrno (MSVC) 的详细信息

c++ - 使用 MS 编译器的 std::cout 非常慢

c++ - 如何在 C++ 中使用 RegQueryValueEx(..) 从注册表中读取 REG_MULTI_SZ 类型的值

找不到 Scala : value macro

c++ - LNK2019 : unresolved extrenal symbol when using std::ifstream