The problem is that if I use main-1 the string value is lost when leaving the scope of the attribute_value() function. Am I doing something wrong?
On Monday, August 19, 2013 7:17:56 PM UTC+2, Ilia Mirkin wrote: > > Perhaps I'm dense, but what's the problem? That gdb doesn't print the > exact type info that you expected? That could well be the difference > between -O2 and -O0... > > On Mon, Aug 19, 2013 at 9:55 AM, Alvaro Aguilera > <[email protected] <javascript:>> wrote: > > Hello, > > > > I'm having a strange problem when setting an string value in a protocol > > buffer. Keep in mind that my experience in C++ and PB is rather limited. > > The .proto file looks more or less like this: > > > > ---------------------- > > package buffers; > > > > message AttributeValue { > > > > enum Type { > > INT64 = 0; > > UINT64 = 1; > > INT32 = 2; > > UINT32 = 3; > > FLOAT = 4; > > DOUBLE = 5; > > INVALID = 6; > > STRING = 7; > > } > > > > required Type type = 1; > > optional int32 i32 = 2; > > optional int64 i64 = 3; > > optional uint32 ui32 = 4; > > optional uint64 ui64 = 5; > > optional float f = 6; > > optional double d = 7; > > optional string str = 8; > > > > } > > > > ---------------------- > > > > I also have a function to convert a class "VariableDatatype" into an > > AttributeValue buffer. It looks like this: > > > > void BufferConverter::attribute_value(const VariableDatatype &s_atv, > > buffers::AttributeValue &b_atv) > > { > > switch(s_atv.type()) { > > case VariableDatatype::Type::STRING: > > b_atv.set_type(buffers::AttributeValue::STRING); > > b_atv.set_str(s_atv.str()); > > break; > > } > > } > > > > > > In the main function I try to create a protocol buffer containing the > string > > stored in VariableDatatype by using the attribute_value() function in > the > > way shown below: > > > > main-1() > > { > > buffers::AttributeValue *bs = new buffers::AttributeValue(); > > c.attribute_value(ds, *bs); > > > > } > > > > This doesn't work. > > If I print the value of b_atv inside the attribute_value function using > gdb > > I get something like: > > > > gdb print b_atv > > 26 = (buffers::AttributeValue &) @0x6496b0: {<google::protobuf::Message> > = > > {<google::protobuf::MessageLite> = { > > > > > > However, when I print *bs from inside main-1, I get something different: > > > > gdb print *bs > > $36 = {<google::protobuf::Message> = {<google::protobuf::MessageLite> = > > {_vptr.MessageLite = 0x642650 <vtable for buffers::AttributeValue+16> > > > > I can work around the problem by using the following main-2: > > > > main-2() > > { > > buffers::AttributeValue *bs = new buffers::AttributeValue(); > > buffers::AttributeValue &bss = *bs; > > > > c.attribute_value(ds, bss); > > } > > > > but that's not very elegant. Can someone point me to the right way to > handle > > this? > > > > Thank you > > A. > > > > > > > > > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "Protocol Buffers" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to [email protected] <javascript:>. > > To post to this group, send email to [email protected]<javascript:>. > > > Visit this group at http://groups.google.com/group/protobuf. > > For more options, visit https://groups.google.com/groups/opt_out. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/groups/opt_out.
