我正在使用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数据类型

10-07 20:22