我有以下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]);
但是,编译时出现以下错误:
(错误是西类牙语,但我认为您可以理解)。可能的翻译是:
我已经对其进行了调查,发现该问题与
repomessage
归档的返回值(repomessage()
)的“基本 getter ”作为const引用返回(因此不能直接对其进行修改)有关,但我确实希望对其进行修改。 。我该如何解决?
谢谢。
最佳答案
代替
this->cbmsg->repomessage().set_nodeid(message[0]);
你需要
this->cbmsg->mutable_repomessage()->set_nodeid(message[0]);
直接设置
repomessage
字段。 repomessage()
将返回无法修改的const CBMessage_RepoMessage&
。关于c++ - 在Message Protobuf中设置消息的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13230117/