在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++的标记。