Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;typedef联合编译错误_C++_Visual C++_Compiler Errors - Fatal编程技术网

C++ C++;typedef联合编译错误

C++ C++;typedef联合编译错误,c++,visual-c++,compiler-errors,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 v

当我试图为这些联合定义几个联合和内联函数时,我在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的构建不会产生任何这些错误


我的搜索没有任何帮助。

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

您需要:

它避免了在同一文件中多次包含同一文件


如果此头文件多次(有时通过其他头文件)包含在同一源文件中,则您的联合将被定义多次,除非您有包含保护。

我假设此代码位于头文件(.h)中

您需要:

它避免了在同一文件中多次包含同一文件


如果此头文件多次(有时通过其他头文件)包含在同一源文件中,则您的联合将被定义多次,除非您有include guard。

这是C代码。C++在这个上下文中不允许匿名结构,这是C代码。在这个上下文中,C++不允许匿名结构。第二行是指您已经定义了“y-YouFieleHHyLILB文件”。谢谢。@TimothyChapman请不要使用带有双下划线的标识符,它们是。include-guard的更好名称是
FILENAME\u H
,或者
NAMESPACE\u FILENAME\u H
,或者甚至是
NAMESPACE\u FILENAME\u H\u datetime\u或\u guid\u或\u任何内容
您所指的第二行定义文件\u H\u库文件已经成功构建。谢谢。@TimothyChapman请不要使用带有双下划线的标识符,它们是。include-guard的更好名称是
FILENAME\u H
,或者
NAMESPACE\u FILENAME\u H
,甚至是
NAMESPACE\u FILENAME\u H\u datetime\u或\u guid\u或\u where
#ifndef YOUFILE_h__
# define YOUFILE_h__

// Your code

#endif // !YOUFILE_h__