protobuf.min.js:63未捕获错误:字段的非法线路类型 Message.Field .Data_new.vert:5(预期2)
当我尝试用protobuf解码我的二进制文件时收到此消息。
vert.proto:
message Vertice_new{
repeated float values = 1 [packed = true];
}
message Data_new{
repeated Vertice_new vert = 1;
}
并且在cpp中我只是以x,y,z,压力,应变......等形式输入了大量原始数据,这些都是浮点数,当我尝试在javascript端解码时我得到这个奇怪的消息,它在我们更改输入数据之前工作正常,现在我不知道在哪里寻找修复。
在这里引用我的cpp代码:
Data_new data_new;
for ... loopparameter is i ; {
vert->add_values(nodes[i].pos.x + diffs[i].pos.x);
vert->add_values(nodes[i].pos.y + diffs[i].pos.y);
vert->add_values(nodes[i].pos.z + diffs[i].pos.z);
vert->add_values(nodes[i].directStress.x);
vert->add_values(nodes[i].directStress.z);
vert->add_values(nodes[i].directStrain.x);
vert->add_values(nodes[i].directStrain.z);
}
答案 0 :(得分:1)
所以最后我想出来了!问题出在我发布的代码之外!我只设置了一个Ostream来写入二进制数据,但我需要实际声明,我想要写入的文件是二进制文件。谢谢大家的帮助和建议。
答案 1 :(得分:0)
您似乎将该字段序列化,就好像它不是packed
一样。您是否使用较旧版本的proto来序列化数据?
线类型5是32位固定宽度字段(fixed32,sfixed32或float),它将匹配repeated float values = 1
。线类型2是长度分隔的字段(字符串,字节,消息或打包重复字段),它匹配您发布的原型中的内容(repeated float values = 1 [packed = true]
)。