私は次の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
filedは「outer」メッセージのfiledですCBMessage
。
このパラメータを変更するためにnodeid
、(「内部」メッセージの)filedにアクセスしたいと思います。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 argumentso'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
提出されたreturns(repomessage()
)の「基本ゲッター」がconst参照として返されるという事実に関連していることがわかりました(したがって、直接変更することはできません)が、変更したいと思います。
どうすればこれを解決できますか?
ありがとう。