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].
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.

Reply via email to