在C中访问枚举成员

时间:2016-01-16 14:29:24

标签: c struct enums

我有一个结构类型的函数,它包含一些整数和对枚举的引用,如下所示:

resource

枚举是:

typedef struct Test {
    Error e;
    int temp;
    int value;
}Test;

并说我有一个想要返回错误的函数(3的枚举),具体取决于是否发生了什么。

如果函数的类型为Test(我无法更改传入的任何类型或值),

为什么我不能像这样返回错误?我将如何返回它(我无法更改结构定义和函数原型)。

typedef enum Error {
    IOError,
    ExternalError,
    ElseError,
}Error;

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

在C中,您需要编码:

Test errorFunc() {
    return IOError;
}

这是C,一切都在全局命名空间中,没有" strong" enums和enum"成员"基本上是"弱类型的整数常量"。因此,访问"数据成员"一个枚举是没有意义的。只需使用常量。

编译器将检查所使用的常量是否属于您返回的类型,如果不是,则进行投诉。抱怨多少取决于编译器,因为枚举是一个有点奇怪的弱类型集中(Stroustrup曾经称它们为#34;奇怪的是一半被烘焙的概念")。

答案 1 :(得分:-1)

您不需要,因为这不是,只需执行此操作

Error
errorFunc() 
{
    return IOError;
}

中没有静态结构成员,也没有namespace,因此您只需使用enum 1 直接。

另外,在中你没有使用->间接运算符,而是你做了类似的事情

class Test
{
public:
    enum Error
    {
        IOError
    };
};

And then you can have

Test::Error
errorFunc()
{
    return Test::IOError;
}

这显然是你困惑的原因。

1 enum不是struct所以从技术上讲它没有成员