【问题标题】:Unable to add repeated field to protobuffer?无法将重复字段添加到 protobuf?
【发布时间】:2015-07-20 16:59:19
【问题描述】:

所以我正在尝试向 protobuff 添加一个重复的字段。但是,每当我使用 make 生成文件时,add_linkage 不会进行任何争论,就好像它实际上无法读取链接应该采用的类型(它是另一个 protobuffer。)我在 protobuffer 文件中做错了什么?

package model_velocity.msgs;
import "vector3d.proto";

message ModelVelResponse
{
  required string name = 1;
  required gazebo.msgs.Vector3d angularVel = 2;
  required gazebo.msgs.Vector3d linearVel = 3;
}

message ModelVel_V{
  repeated ModelVelResponse linkage = 1;
}

我需要做一些不同的事情吗?我需要调用不同的函数来重复消息吗?任何帮助将不胜感激。

【问题讨论】:

    标签: c++ compilation static-libraries protocol-buffers


    【解决方案1】:

    add_linkage() 不接受任何参数。 repeated 消息类型的add_x() 方法返回一个指向消息的新空实例的指针。您需要执行类似ModelVelResponse* resp = my_vodel_vel_v.add_linkage(); 的操作。然后您可以根据需要分配给返回消息的字段。

    【讨论】:

    • 那我怎么重复赋值呢?只使用 add_linkage 作为有效的构造函数?
    • 每次调用 add_linkage() 时,它都会在消息中添加一个新的 MedelVelResponse 并返回一个指向它的指针,所以是的,你可以把它想象成一个构造函数(尽管这种模式是通常称为工厂)。
    • 我明白了,尽管它现在可以编译,但当我使用它时,我收到了一个关于未初始化值的错误。
    • 我明白了,尽管它现在可以编译,但当我使用它时出现一个关于未初始化值的错误:在主题 [/gazebo/world/default_bot/image] 上发布未初始化的消息。必填字段 [linkage[0].linearVel.x,linkage[0].linearVel.y,linkage[0].linearVel.z,linkage[1].linearVel.x,linkage[1].linearVel.y,linkage[ 1].linearVel.z,链接[2].linearVel.x,链接[2].linearVel.y,链接[2].linearVel.z,链接[3].linearVel.x,链接[3].linearVel。 y, links[3].linearVel.z,...] 是我收到的错误信息。
    • 您似乎还没有初始化您需要的字段。 add_linkage() 创建空消息;您需要初始化其中的字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多