在C语言中使用枚举的并集

在C语言中使用枚举的并集,c,enums,unions,C,Enums,Unions,我在状态机中使用指向函数的指针,需要传递一个枚举值,该值是从枚举的并集构建的。当我使用带有函数调用的表时,我需要它们的调用/返回值相匹配。我曾尝试在本地box和CodeChef上使用GCC C 4.9.2和CodeChef构建此功能,但我发现错误: 程序c:在函数“main”中:程序c:12:15:错误:应为表达式 在“FOO”NewFooStateFOO.D之前;// 世上没有食物。D是它自己的标识符,它指定与FOO关联的枚举值。但是,您的NewFooState函数需要一个FooBar,而不是

我在状态机中使用指向函数的指针,需要传递一个枚举值,该值是从枚举的并集构建的。当我使用带有函数调用的表时,我需要它们的调用/返回值相匹配。我曾尝试在本地box和CodeChef上使用GCC C 4.9.2和CodeChef构建此功能,但我发现错误:

程序c:在函数“main”中:程序c:12:15:错误:应为表达式 在“FOO”NewFooStateFOO.D之前;// 世上没有食物。D是它自己的标识符,它指定与FOO关联的枚举值。但是,您的NewFooState函数需要一个FooBar,而不是FOO或BAR。因此,您需要一个适当类型的变量。一种方法是:

  FooBar FOO_D = { .Foo=D };
  NewFooState(FOO_D);

G不是一个字段,它是它自己的标识符。NewFooStateG会给您带来什么编译器错误?jxh,奇怪的是,打开NewState似乎可以编译并正常工作。请更新您的问题,让我们看看您的实际代码。您的联合类型具有类型为Foo\u t的成员。有一种类型的FO和一个类型EnUM FooWiT,但没有类型FooHyt,除非您将代码编译为C++,在这种情况下,您需要更新标记。OldState=NewState上缺少一个分号。考虑到这样的错误,不可能知道实际问题是什么。请参阅。C中没有名称空间。因此没有FOO.D或FOO_t.D。您所做的只是定义A=0、B=1、C=2和D=3。E=0,F=1,G=2。创建一个包含FOO和BAR成员的联盟只会制造麻烦。
  FooBar FOO_D = { .Foo=D };
  NewFooState(FOO_D);