Google Protobuf3消息问题中的多个字符串

时间:2016-10-08 05:06:57

标签: c++ networking protocol-buffers

我的消息如下:

install.packages("qualityTools")
library(qualityTools)
x = rweibull(1000, 2, 8) + 1000
pcr(x, "weibull", lsl = 100, usl = 117)

我试图在我的c ++代码中初始化它,如下所示:

message Connected {
  sint32 xloc   = 1; // x spawn world position
  sint32 yloc   = 2; // y spawn world position
  sint32 zrot   = 3; // z spawn rotation
  string sector = 4; // sector name (unsure about this)
  string name   = 5; // player name
  string pid    = 6; // player id
  string scolor = 7; // ship color
  string sname  = 8; // ship name
}

由于某种原因,当我设置我的字符串参数时,之前的字符串被设置为该字符串值。因此,如果我执行set_pid,名称字段也将更改为pid。 set_scolor这个名字& pid将设置为s_color。 set_sname名称,pid& scolor会变成sname。看起来它们都共享相同的字符串指针字段位置。

每个字符串字段的结果将是" shipName"执行后。

我没有正确初始化我的消息吗?或者我需要在这里做些不同的事情吗?当我从编码流中序列化我的消息时,我得到了我预期的消息,但是手动创建似乎并不适用于我目前正在尝试做的事情。

非常感谢您提供的信息。

1 个答案:

答案 0 :(得分:0)

更改为我的字符串使用重复字段似乎解决了问题。

active record collection

有了这个,我可以手动将新字符串添加到重复的字符串列表中。

message Connected {
  sint32 xloc = 1; // x spawn world position
  sint32 yloc = 2; // y spawn world position
  sint32 zrot = 3; // z spawn rotation
  // [0] => username
  // [1] => userid
  // [2] => shipcolor
  // [3] => shipname
  repeated string userinfo = 4;
}

它绝对允许使用更清晰的.proto文件,但奇怪的是,仅使用单个字符串会导致问题。