2015-07-20 2 views
0

Так что я пытаюсь добавить повторяющееся поле в 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; 
} 

Нужно ли мне что-то делать? Мне нужно вызвать другую функцию для повторения сообщения? Любая помощь будет оценена по достоинству.

ответ

1

add_linkage() не принимает никаких аргументов. repeated тип сообщений add_x() метод возвращает указатель на новый пустой экземпляр сообщения. Вам нужно сделать что-то вроде ModelVelResponse* resp = my_vodel_vel_v.add_linkage();. Затем вы можете назначить поля возвращаемого сообщения по мере необходимости.

+0

Тогда как бы я его еще раз назначил? Просто используйте add_linkage как эффективный конструктор? – Skylion

+0

Каждый раз, когда вы вызываете 'add_linkage()', он добавляет новое сообщение «MedelVelResponse» к вашему сообщению и возвращает указатель на него, так что да, вы можете думать о нем как о конструкторе (хотя этот шаблон обычно называется фабрикой) , –

+0

Я вижу, даже если он компилируется сейчас, я получаю сообщение об ошибке, когда я использую его что-то вроде неинициализированного значения. – Skylion

Смежные вопросы