在构造函数中使用sizeof结构

时间:2014-01-28 16:19:08

标签: c++ struct constructor sizeof

我正在尝试在其构造函数中初始化struct,但在初始化成员header.length时,我在最后一行遇到编译器错误。它的尺寸当时是否已知?

这是编译器错误和structure

In constructor ‘stDescriptor::stDescriptor()’:
error: expected primary-expression before ‘)’ token


struct stDescriptor {
    usb_functionfs_descs_head   header;
    stDescriptorBody fs_descs;
    stDescriptorBody hs_descs;

    stDescriptor(){
        header.fs_count = 3;
        header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC);
        header.hs_count = 3;
            header.length = cpu_to_le32(sizeof stDescriptor);
         }
};

1 个答案:

答案 0 :(得分:4)

你需要

header.length = cpu_to_le32(sizeof(stDescriptor));

因为stDescriptor是类型名称,而不是表达式。

5.3.3 Sizeof [expr.sizeof]

  

1 sizeof运算符产生其操作数的对象表示中的字节数。操作数是   表达式,它是未评估的操作数(第5条)或带括号的type-id。 [...]