有一个小的嵌套结构:
struct decode_bunch_ctrl_t
{
pure_smb2_header::flags_t request_flags;
bool flags_set;
uint64_t msg_id;
decode_bunch_ctrl_t(pure_smb2_header::flags_t request_flags_, uint64_t msg_id_)
: request_flags(request_flags_), flags_set(true), msg_id(msg_id_) {}
decode_bunch_ctrl_t()
: request_flags(pure_smb2_header::flags_t()), flags_set(false), msg_id(0) {}
operator bool () { return flags_set && msg_id; }
};
结构pure_smb2_header::flags_t
定义如下:
struct flags_t
{
static const uint8_t PRIORITY_MASK = 0b111;
uint32_t reserved1:4;
uint32_t dfs_operations:1;
uint32_t replay_operation:1;
uint32_t reserved2:2;
uint32_t reserved3:16;
uint32_t server_to_redir:1;
uint32_t async_command:1;
uint32_t related_operations:1;
uint32_t signed_packet:1;
uint32_t priority_mask:3;
uint32_t reserved4:1;
}
使用不带参数的构造函数初始化对象时,会产生编译器错误:
error: declaration of ‘smb2_subdecoder::decode_bunch_ctrl_t dctrl_bunch’ shadows a parameter
917 | decode_bunch_ctrl_t dctrl_bunch;
但是在创建对象时没有参数被着色。问题是什么?
编译器版本:
gcc version 9.2.1 20191102 (Ubuntu 9.2.1-17ubuntu1~18.04.1)
我可以假设您在错误的地方寻找,看起来您在函数中创建了一个名称与参数名称匹配的局部变量。917 是创建此类参数的行号。
这是谷歌的一个例子