我有以下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/

10-09 07:22