我有以下protobuf定义:
message CBMessage {
required int32 type = 1; //defines the kind of message that we send
optional RepoMessage repomessage = 2;
message RepoMessage {
optional int32 nodeid = 1;
optional int32 timestampsec = 2;
optional int32 timestampmicrosec = 3;
}
}
正如您所注意到的,repomessage
提交的文件是“外部”消息CBMessage
的字段。
我想访问nodeid
字段(“内部”消息RepoMessage
)以修改此参数。所以我创建了一个CBMessage对象:
CBTxMessages::CBMessage* cbmsg;
this->cbmsg = new CBTxMessages::CBMessage;
我试图以这种方式修改nodeid
:
this->cbmsg->repomessage().set_nodeid(message[0]);
然而,编译时出现以下错误:
错误:pasar'const CBTxMessages :: CBMessage_RepoMessage'como el argumento'this'de'void CBTxMessages :: CBMessage_RepoMessage :: set_nodeid(google :: protobuf :: int32)'descarta a los calificadores [-fpermissive]
(错误是西班牙语,但我认为您可以理解)。可能的翻译将是:
'void CBTxMessages :: CBMessage_RepoMessage :: set_nodeid(google :: protobuf :: int32)的'this'参数'丢弃限定符“)
我对它进行了调查,发现问题与repomessage
字段返回(repomessage()
)的“基本getter”作为const引用返回有关(因此它不能是直接修改),但我确实想修改它。
我该如何解决这个问题?
感谢。
答案 0 :(得分:4)
而不是
this->cbmsg->repomessage().set_nodeid(message[0]);
你需要
this->cbmsg->mutable_repomessage()->set_nodeid(message[0]);
直接设置repomessage
字段。 repomessage()
将返回无法修改的const CBMessage_RepoMessage&
。