在Message Protobuf中设置消息的字段

时间:2012-11-05 10:25:22

标签: c++ nested protocol-buffers

我有以下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引用返回有关(因此它不能是直接修改),但我确实想修改它。

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:4)

而不是

this->cbmsg->repomessage().set_nodeid(message[0]);

你需要

this->cbmsg->mutable_repomessage()->set_nodeid(message[0]);

直接设置repomessage字段。 repomessage()将返回无法修改的const CBMessage_RepoMessage&