我正在使用C ++ 11/14(Visual Studio 2015)构建解析器。如何在类中创建和初始化表,并让其计算表的长度?
我从编译器中收到以下错误:
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 :: __ requests':数组绑定无法从类初始化程序中推导出
1> d:\ temp \ win32project1 \ win32project1 \ source1.cpp(45):注意:请参见“ tlv :: _ requests”的声明
typedef enum _TLV_TYPE : UINT32
{
tlv_type_read,
tlv_type_write,
tlv_type_param,
tlv_type_status
} TLV_TYPE;
typedef struct
{
TLV_TYPE type;
UINT32 length;
} TLV_RECORD, *pTLV_RECORD;
typedef std::function <UINT32 (pTLV_RECORD Record)> pTLV_PARSER;
typedef struct
{
TLV_TYPE type;
pTLV_PARSER parse_routine;
vector <TLV_RECORD> parameters;
vector <TLV_RECORD> response;
} TABLE, *pTABLE;
class tlv
{
public:
tlv (SOCKET Socket);
~tlv ();
UINT32 start_parse (pTLV_RECORD Record);
protected:
pTLV_PARSER parse_read;
pTLV_PARSER parse_write;
const TABLE _requests [] =
{
{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}}},
};
}; // End of class tlv
最佳答案
存储指向成员函数的指针的类型声明如下:
typedef int (tlv::*pTLV_PARSER)(pTLV_RECORD Record);
我不清楚您的解析器函数究竟返回什么,因此仅在声明中使用了
int
数据类型