Ah, you want AddMessage() instead then. That'll return a pointer to a valid
message object, and you can call GetReflection() on that.

On Tue, May 4, 2010 at 9:43 AM, Ryan <droopyk...@gmail.com> wrote:

> Ah, yes, I will update that loop.
>
> I'm still a little confused about something though. Ultimately I am
> trying to create an entry, and set a field, within this nested-
> repeated message. However, how can I create an entry without first
> getting the reflection for the nested message? My .proto file is as
> follows:
>
> package db;
> message Database {
>
> message Team {
> required string name = 1;
> optional string city = 2;
> }
>
> // true if the data should be stored to the database
> required bool write = 1;
>
>  // fill this in to ask about the items in the 'roster' or
> 'league'
> optional string query = 2;
>
> message Player {
> required string name = 1;
> optional float batting_avg = 2;
> }
> // list of players
> repeated Player roster = 3;
> // list of teams
> repeated Team league = 4;
> }
>
>
> I am trying to dynamically create a new entry in roster, and set the
> name and batting_avg of the Player within that entry.
>
> This is my first time using protocol buffers, and I feel like I must
> be missing a fundamental step here =)
>
> Thanks for the help!
>
> -Ryan
>
>
> On May 4, 12:23 pm, Jason Hsueh <jas...@google.com> wrote:
> > Your msg is completely empty. There aren't any entries in the repeated
> field
> > - FieldSize() should be returning 0. Your loop needs to terminate when i
> <
> > size, not i <= size - accessing the 1st element of an empty repeated
> field
> > is going to return an invalid pointer.
> >
> > FYI bounds checking is done in debug mode, so you'd get more informative
> > assertion failures rather than segfaults.
> >
> >
> >
> > On Mon, May 3, 2010 at 10:12 PM, Ryan <droopyk...@gmail.com> wrote:
> > > Hello all,
> >
> > > I am getting a segmentation fault when trying to use the
> > > MutableRepeatedMessage() class with a nested repeated method. My
> > > simple C++ code is as follows:
> >
> > > /* Decleration in bufferDB.h*/
> > >        private:
> > >                        std::string serialData;
> > >                        Message* msg;
> > >                        Message* nestedMsg;
> > >                        const Descriptor* msgDescript;
> > >                        const Reflection* msgReflect;
> > >                        const FieldDescriptor* msgField;
> >
> > >                        const Descriptor* nestedDescript;
> > >                        const Reflection* nestedReflect;
> > >                        const FieldDescriptor* nestedField;
> >
> > > /*Definition in bufferDB.cpp */
> > > msg = new db::Database;
> > >        msgDescript = msg->GetDescriptor();
> > >        msgReflect = msg->GetReflection();
> > >        msgField = msgDescript->field(2);
> >
> >        //msgReflect->MutableRepeatedMessage(msg, msgField, 0)-
> >
> > > >DiscardUnknownFields();
> >
> >         if (msgField->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE)
> >
> >
> >
> > >         {
> > >                printf("Field is a MESSAGE\n");
> > >              if (msgField->is_repeated())
> > >              {
> > >                        printf("Field is Repeated\n");
> > >                int size = msgReflect->FieldSize(*msg, msgField);
> > >                        printf("Field size is %d\n",size);
> > >                for (int i = 0; i <= size; i++)
> > >                {
> > >                        printf("I went inside this loop");
> > >                        nestedReflect =
> > > msgReflect->MutableRepeatedMessage(msg, msgField,
> > > i)->GetReflection();
> >
> > >                }
> > >              }
> > >              else
> > >              {
> > >                        printf("Field is NOT repeated");
> > >                const Message& sub_message =
> msgReflect->GetMessage(*msg,
> > > msgField);
> > >              }
> > >          }
> >
> > > The segmentation fault occurs when I call GetReflection(). Am I doing
> > > something wrong with the use of the mutable message pointer being
> > > returned from MutableRepeatedMessage?
> >
> > > Any help anyone could give me would be great. Thanks!
> >
> > > -Ryan
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Protocol Buffers" group.
> > > To post to this group, send email to proto...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> <protobuf%2bunsubscr...@googlegroups.com<protobuf%252bunsubscr...@googlegroups.com>
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/protobuf?hl=en.
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> > To post to this group, send email to proto...@googlegroups.com.
> > To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> > For more options, visit this group athttp://
> groups.google.com/group/protobuf?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to