C++ 从C+中的协议缓冲区读取重复字段时出现问题+;
org.protoC++ 从C+中的协议缓冲区读取重复字段时出现问题+;,c++,protocol-buffers,C++,Protocol Buffers,org.proto message Optimize { required int element_size = 1; required string element_name = 2; } message nodes { repeated Optimize = 1; } 具有此解码功能: DecodeNodeMsg(char *msg, int size) { Org::nodes node; int element_size; strin
message Optimize {
required int element_size = 1;
required string element_name = 2;
}
message nodes {
repeated Optimize = 1;
}
具有此解码功能:
DecodeNodeMsg(char *msg, int size)
{
Org::nodes node;
int element_size;
string element_name;
int NumofElem = 0;
node.ParseFromArray((void *)msg, size);
for (int i = 0; i < nodes.Optimize().size(); i++)
{
element_size = nodes.Optimize(i).element_size();
element_name = nodes.Optimize(i).element_name();
cout << "size" << element_size << endl;
cout << "name" << element_name << endl;
NumofElem++;
}
cout << "number of" << NumofElem << endl;
}
DecodeNodeMsg(字符*msg,整数大小) { Org::nodes节点; int元素的大小; 字符串元素名称; int NumofElem=0; ParseFromArray((void*)消息,大小); 对于(int i=0;i
语法无效,我对C++的顶部有疑问。那个cout我看不出您实际上在哪里解码消息。我看到您创建了一个新的节点对象,但随后调用Org::nodes(),这看起来是错误的。我认为您需要访问如下优化元素: for (int i = 0; i < node->optimize_size(); i++) { element_size = node->optimize(i).element_size(); element_name = node->optimize(i).element_name(); cout << "size" << element_size << endl; cout << "name" << element_name << endl; NumofElem++; }
该函数将缓冲区反序列化为局部变量节点,但循环引用节点。我还将验证ParseFromArray的返回值。您提到的三个都是问题中的键入错误。我有一个ParsingFromArray函数,节点是局部变量,因此nodes.optimize()很好,而且我有消息的每个字段。已经更新了这个问题。抱歉给您带来不便,请提供代码,编译和演示错误。代码现在您没有编译-至少,<代码>。PROTTOmessage nodes { repeated Optimize = 1; }