我有以下 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 引用返回(因此不能直接修改)这一事实有关,但我确实希望对其进行修改。
我该如何解决这个问题?
谢谢。