如何解决错误 "const inet::MacHeaderBase’ as ‘this’ argument discards qualifiers [-fpermissive]"

How to solve the error "const inet::MacHeaderBase’ as ‘this’ argument discards qualifiers [-fpermissive]"

我正在使用以下 header 结构:

class MacHeaderBase extends FieldsChunk
{
    MacAddress srcAdd;
    MacAddress destAdd;
    MacTypes type; 
    int morebit; 
      
}

要设置morebit,我这样写hdr->setMorebit(1)

    auto packet = currentTxFrame->dup();
    const auto& hdr = packet->peekAtFront<MacHeaderBase>(); 
    DestAddr = hdr->getDestAddr();
    hdr->setMorebit(1);

但是,我收到错误消息:

passing ‘const inet::MacHeaderBase’ as ‘this’ argument discards qualifiers [-fpermissive] hdr->setMorebit(1);

谁能建议如何解决这个错误?

方法 peetAtFront() returns 一个 不可变的 块,因此无法更改它。使用 makeExclusivelyOwnedMutableChunk 以这种方式将其转换为可变块:

auto packet = currentTxFrame->dup();
auto& hdr = makeExclusivelyOwnedMutableChunk(packet->peekAtFront<MacHeaderBase>()); 
DestAddr = hdr->getDestAddr();
hdr->setMorebit(1);        

编辑
当想要 读取 块及其字段时,应使用 peekAtFront()修改数据包块的推荐方法是:

  • 使用removeAtFront()获取块并将其从数据包中删除
  • 修改那个块
  • 使用insertAtFront()
  • 将该块插入数据包