如何解决错误 "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()
将该块插入数据包
我正在使用以下 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()
将该块插入数据包