Hi

I'm new in protobuf and would need it to store different values in an 
binary file.

I am using Qt 5.3 as development Environment.


 My problem is to access and store the values inside the message “Cat” and 
“Dog”


 I think that storing the data is working right because I am able to access 
parts of it.

But when I try to go deeper it crashes :-(



extended adressbook.proto example

[code]

package dataLog;

//==============================================================================
 
Animal

message Animal

{

        extensions 100 to max;

        enum AnimalType

        {

                Type_Cat = 1;

                Type_Dog = 2;

        }

        required AnimalType type = 1;

}


//==============================================================================
        Cat

message Cat

{

        extend Animal

        {

                required Cat beast = 100; // Unique Animal extension number

        }

        optional bool declawed = 1;

}


//==============================================================================
        Dog

message Dog

{

        extend Animal

        {

                required Dog beast = 101; // Unique Animal extension number

        }

        optional uint32 bones_buried = 1;

}


//==============================================================================
        Person

message Person

{

        required string name = 1;

        required int32 id = 2;

        required Animal pet = 3;

        optional string email = 4;


        enum PhoneType 

        {

                MOBILE = 0;

                HOME = 1;

                WORK = 2;

        }


        message PhoneNumber 

        {

                required string number = 1;

                optional PhoneType type = 2 [default = HOME];

        }

        repeated PhoneNumber phone = 5;

}




//==============================================================================
        Address Book

message AddressBook 

{

        repeated Person person = 1;

}

[/code]



The new code based on the adressbook example:

Adding new People

[code]

//============================================================================= 
add Person

void DataLog::addPerson( dataLog::Person* person )

{

        person->set_id( 9 );

        person->set_name( "Bob" );

        person->set_email( "b...@mail.com" );

        dataLog::Person::PhoneNumber* phone_number = person->add_phone();

        phone_number->set_number( "987654321" );

        phone_number->set_type( dataLog::Person::MOBILE );


        //person->set_allocated_pet( addAnimal(dataLog::Animal::Type_Dog) );


        dataLog::Animal * pAnimal = person->mutable_pet(); //new 
dataLog::Animal;

        pAnimal->set_type( dataLog::Animal::Type_Dog );

        dataLog::Dog *pDog = pAnimal->MutableExtension( dataLog::Dog::beast );

        pDog->set_bones_buried( 989 );


        //person->set_allocated_pet( pAnimal );

}

[/code]

Reading the person data – ID, Name, email, and phone are working great but 
not so the animal :-(

[code]

//============================================================================= 
write People

void DataLog::writePeople()

{

        for( int i=0; i<address_book.person_size(); i++ )

        {

                const dataLog::Person& person = address_book.person( i );

                                //...


                //Animal

                qDebug() << "  Has Pet:" << person.has_pet();

                dataLog::Animal animal = person.pet();

                switch( animal.type() )

                {

                        case dataLog::Animal::Type_Cat:

                                break;


                        case dataLog::Animal::Type_Dog:

                        {

                                qDebug() << "  Beast = Dog";

                                dataLog::Dog *pDog = 
animal.MutableExtension(dataLog::Dog::beast);

                                qDebug() << "  bones_buried: " << 
pDog->bones_buried();                 //<<---- _CRASH !!!!!!

                        }

                        break;


                        defualt:

                                qDebug() << "  Unknow Animal";

                                break;

                }

        } // for


        qDebug() << "READ END";

}

[/code]



 
 

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to