如何在类定义中初始化表? 我正在使用C++ 11/14(VisualStudio 2015)构建解析器。如何在类中创建和初始化表,并让它计算表的长度

如何在类定义中初始化表? 我正在使用C++ 11/14(VisualStudio 2015)构建解析器。如何在类中创建和初始化表,并让它计算表的长度,c++,C++,我从编译器中得到以下错误: 1> d:\temp\win32project1\win32project1\source1.cpp(49):警告C4200:使用了非标准扩展:结构/联合中大小为零的数组 1> d:\temp\win32project1\win32project1\source1.cpp(49):注意:默认构造函数或复制/移动赋值运算符将忽略此成员 1> d:\temp\win32project1\win32project1\source1.cpp(49):错误C2997:“tlv:

我从编译器中得到以下错误:

1> d:\temp\win32project1\win32project1\source1.cpp(49):警告C4200:使用了非标准扩展:结构/联合中大小为零的数组

1> d:\temp\win32project1\win32project1\source1.cpp(49):注意:默认构造函数或复制/移动赋值运算符将忽略此成员

1> d:\temp\win32project1\win32project1\source1.cpp(49):错误C2997:“tlv::\u请求”:无法从类内初始值设定项推断数组绑定

1> d:\temp\win32project1\win32project1\source1.cpp(45):注意:请参阅“tlv::\u请求”的声明

typedef枚举类型:UINT32
{
tlv_类型_读取,
tlv_类型_写入,
tlv_类型_参数,
tlv_类型_状态
}TLV_型;
类型定义结构
{
TLV_型;
UINT32长度;
}TLV_记录,*pTLV_记录;
typedef std::函数pTLV_解析器;
类型定义结构
{
TLV_型;
pTLV_解析器parse_例程;
矢量参数;
媒介反应;
}表*pTABLE;
类tlv
{
公众:
tlv(插座);
~tlv();
UINT32开始解析(pTLV\U记录);
受保护的:
pTLV_解析器解析_读取;
pTLV_解析器parse_write;
常量表_请求[]=
{
{tlv_type_read,parse_read,{{tlv_type_param,4},{tlv_type_param,0},{tlv_type_param,4},{tlv_type_status,4}},
{tlv_type_write,parse_write,{{tlv_type_param,4}},{{tlv_type_status,4}}},
};
};  // 课程结束

存储成员函数指针的类型声明如下:

typedef int (tlv::*pTLV_PARSER)(pTLV_RECORD Record);

我不清楚解析器函数究竟返回什么,所以在声明中使用了
int
数据类型

存储成员函数指针的类型声明如下:

typedef int (tlv::*pTLV_PARSER)(pTLV_RECORD Record);

我不清楚您的解析器函数的返回值,所以在声明中使用了<代码> int >代码>数据类型>声明> @ CdHoWee提供的链接中的原因,数组的长度必须指定为C++标准,因为委员会最了解的原因,对于成员初始化器如何处理(见链接和链接中的链接)有一些奇怪的和不明显的规则,并且这些规则的解释从一个编译器到另一个编译器不同。

< P>由于在评论中@ @ CouHuee提供的链接中指定的原因,所以必须指定数组长度,因为C++标准,出于委员会最为熟知的原因,在如何对待成员初始签名者方面有着相当离奇和不明显的规则(参见链接,以及链接中的链接),这些规则的解释从一个编译器到另一个编译器不同。

可能的重复的主题:C++中不需要大多数的<代码>类型DEFF <代码> ING。代码>是C++中的反模式。编写定义的正确方法是
enumtlv_类型:UINT32{…}。“代码”> TyPulf< /Cudio>您正在使用的是C,而不是C++。如果您遇到错误,请将其包括在问题中。@cdhowie,我收到以下错误:警告C4200:使用了非标准扩展:结构/联合中的零大小数组注意:默认构造函数或复制/移动赋值运算符将忽略此成员错误C2997:“tlv:::\u请求”:无法从类内初始值设定项推断数组绑定注意:请参阅“tlv::\u请求”错误C2229的声明:类“TLVAY”有一个非法的零大小的可能重复的主题:C++中不需要大多数的<代码>类型DEFF <代码> ING。代码>是C++中的反模式。编写定义的正确方法是
enumtlv_类型:UINT32{…}。“代码”> TyPulf< /Cudio>您正在使用的是C,而不是C++。如果您遇到错误,请将其包括在问题中。@cdhowie,我收到以下错误:警告C4200:使用了非标准扩展:结构/联合中的零大小数组注意:默认构造函数或复制/移动赋值运算符将忽略此成员错误C2997:“tlv:::\u请求”:无法从类内初始值设定项推断数组绑定注意:请参阅“tlv::\u请求”错误C2229的声明:类“tlv_389;”具有非法的零大小数组