Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++ 为什么赢了';t此C数组初始化在g++;?_C++_C_Arrays_Initialization - Fatal编程技术网

C++ 为什么赢了';t此C数组初始化在g++;?

C++ 为什么赢了';t此C数组初始化在g++;?,c++,c,arrays,initialization,C++,C,Arrays,Initialization,大家好 我的代码取自一个C项目。我无法在g++下以任何方式编译它 我能用这个做什么 enum EnumIndexID{ ID_VALUE_A=2, ID_VALUE_B=2 } struct newtype { enum MyEnumID eid; const char *name; } table[] = { [ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"}, [ID_V

大家好 我的代码取自一个C项目。我无法在g++下以任何方式编译它

我能用这个做什么

 enum EnumIndexID{
       ID_VALUE_A=2,
       ID_VALUE_B=2
 }

 struct newtype {
     enum MyEnumID eid;
     const char *name;
} table[] = {
     [ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
     [ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};

您至少需要一个入口点:

int main() {
.... lots of other code ...
}

第一个枚举定义后缺少分号

编辑


另外,出于某种原因。

除了
枚举定义后缺少分号之外,
表[]
声明在语法上不正确,将无法在G++上编译:

struct newtype {
     enum MyEnumID eid;
     const char *name;
} table[] = {
     { MyEnumA, "ID_MSG_HeartbeatReq"},
     { MyEnumB, "ID_MSG_HeartbeatReq"},
};

编辑:今天我学习了指定初始化。

您确定您的编译器支持该语法吗

g++没有。 从该超链接:

标准C89要求初始值设定项的元素以固定顺序出现,与正在初始化的数组或结构中元素的顺序相同

在ISOC99中,您可以按任意顺序给出元素,指定它们所应用的数组索引或结构字段名,GNUC也允许将其作为C89模式的扩展此扩展未在GNU C++中实现。


以下代码编译为C99(注意:它与C89无效):

编辑:其他人注意到
ID\u值A
ID\u值B
是相同的值,即2。这可能是代码中的一个bug。然而,gcc接受这一点


欢呼和HTH,

如果这是纯C代码,我不认为C++标签属于那里。你没有提到你正在接受什么编译错误?IDIValueSua和IDuValueSub打算是一样的吗?GCC似乎对此没有任何问题,只是使用了最后一个初始值设定项。考虑到下面关于一些答案的讨论,如果您能更具体地介绍编译器,这将非常有用。版本号和平台将特别有用。您只需要它来链接(并且只有当您的项目是应用程序时),而不需要它来编译。它在语法上是正确的,并且在添加分号(当然还有MyEnumID的定义)后,在G++中可以很好地编译。不过,我不太明白编译器是如何在指定的初始值设定项中处理重复索引的。对不起,我弄错了。它显然受到GCC的支持,但不受G++的支持。由于它是纯C代码,我一开始没有使用G++。是的,我也是,我刚刚学习了指定的初始值设定项。G++不是默认设置为“GCC”编译吗?Ie“编译为C99减去一些,再加上一些GNU绒毛”。我确信它应该用默认编译器设置编译。NOPE,<代码> G++< /Cord>是C++编译器,与代码> GCC < /代码>不同。它也不编译为C++,它在GCC文档中被明确地表述。因此正确的GCC设置要么是-STD= GNU99,要么是STD= C99。您是正确的,这可能是一个错误,但是它是标准一致的。AFAIR是最后一个初始化的初始化,它至少在好的旧DEV C++ 4.9.可能您使用了错误的编译器设置?Dev-C++使用了GCC的mingw端口-可能端口中支持指定的初始值设定项?他没有详细介绍编译器或环境。我仍然怀疑这就是问题所在。
enum MyEnumID {
    MyEnumA, MyEnumB
};

enum EnumIndexID{
    ID_VALUE_A=2,
    ID_VALUE_B=2
};

struct newtype {
    enum MyEnumID eid;
    const char *name;
} table[] = {
    [ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
    [ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};

int main() { return 0; }