Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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_Struct_Enums_C++ - Fatal编程技术网

在C语言中访问枚举成员

在C语言中访问枚举成员,c,struct,enums,c++,C,Struct,Enums,C++,我有一个结构类型的函数,它包含一些整数和对枚举的引用,例如: typedef struct Test { Error e; int temp; int value; }Test; 其中,枚举为: typedef enum Error { IOError, ExternalError, ElseError, }Error; 假设我有一个函数想要返回一个错误(枚举数为3),这取决于是否发生了什么 如果函数是类型测试(我不能更改传入的任何类型或值)

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

typedef struct Test {
    Error e;
    int temp;
    int value;
}Test;
其中,枚举为:

typedef enum Error {
    IOError,
    ExternalError,
    ElseError,
}Error;
假设我有一个函数想要返回一个错误(枚举数为3),这取决于是否发生了什么

如果函数是类型测试(我不能更改传入的任何类型或值)

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


任何帮助都将不胜感激

你不需要,因为这不是,就这么做吧

Error
errorFunc() 
{
    return IOError;
}
在中,没有静态结构成员,也没有
命名空间
s,因此您只需直接使用
枚举
值1

另外,在这种情况下,您不会使用
->
间接寻址操作符,而是执行类似的操作

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

And then you can have

Test::Error
errorFunc()
{
    return Test::IOError;
}
这显然是你困惑的原因



1一个
enum
不是一个
struct
,因此从技术上讲,它没有成员

您不需要,因为这不是,只需这样做

Error
errorFunc() 
{
    return IOError;
}
在中,没有静态结构成员,也没有
命名空间
s,因此您只需直接使用
枚举
值1

另外,在这种情况下,您不会使用
->
间接寻址操作符,而是执行类似的操作

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

And then you can have

Test::Error
errorFunc()
{
    return Test::IOError;
}
这显然是你困惑的原因


1一个
enum
不是一个
struct
,因此从技术上讲,它在C中没有成员,您可以编写:

Test errorFunc() {
    return IOError;
}
这是C,所有内容都在全局命名空间中,没有“强”枚举,枚举“成员”基本上是“弱类型整数常量”。因此,访问枚举的“数据成员”毫无意义。只需使用常量

编译器将检查所使用的常量是否属于您返回的类型,如果不是,则进行投诉。它会抱怨多少取决于编译器,因为枚举是一个有点奇怪的弱类型concent(Stroustrup曾称之为“奇怪的半成品概念”)。

在C中,您可以编写:

Test errorFunc() {
    return IOError;
}
这是C,所有内容都在全局命名空间中,没有“强”枚举,枚举“成员”基本上是“弱类型整数常量”。因此,访问枚举的“数据成员”毫无意义。只需使用常量


编译器将检查所使用的常量是否属于您返回的类型,如果不是,则进行投诉。C++的C++语言C++,Stroustrup将被标记为这个“C++”代码,你为什么不需要,因为这不是C++,只是做这个< /C> > C++中没有C++,你可以有<代码>类测试。{EnUM错误{ IORION,…};} /Cuth>:“错误>函数:{返回测试:IOrror;} /Cube。这似乎是混淆的原因。是的,在C中,对不起,标记C++ +代码),你不需要,因为这不是C++,只是做这个< /C>!你在C++中也不做C++,你可以有<代码>类测试{EnUM错误{IOrror,…}。{<代码> >测试:>错误>函数():返回测试::IOrror;} /COD>这似乎是混淆的原因。是的,在C中,对不起C++的标记。