Because the code generator declares but does not define operator<, which is required to insert into a set. You will need to implement those for Pet, Specialty, and Visit. I think you just need to write a file specifically for this that includes the petclinic_types.h file.
- Rush
On Aug 16, 2010, at 5:22 PM, EY Tsai wrote:
>
> g++ -o CppClinicClient -I./gen-cpp -I/usr/local/include/thrift
> -I/usr/include/boost/ -I./ -L/usr/local/lib -lthrift
> main/CppClinicClient.cpp gen-cpp/petclinic_constants.cpp
> gen-cpp/petclinic_types.cpp gen-cpp/PetClinic.cpp
> /tmp/ccSEmUDT.o: In function
> `std::less<tc_petclinic::Specialty>::operator()(tc_petclinic::Specialty
> const&, tc_petclinic::Specialty const&) const':
> petclinic_types.cpp:(.text._ZNKSt4lessIN12tc_petclinic9SpecialtyEEclERKS1_S4_[std::less<tc_petclinic::Specialty>::operator()(tc_petclinic::Specialty
> const&, tc_petclinic::Specialty const&) const]+0x14): undefined reference to
> `tc_petclinic::Specialty::operator<(tc_petclinic::Specialty const&) const'
> /tmp/ccSEmUDT.o: In function
> `std::less<tc_petclinic::Visit>::operator()(tc_petclinic::Visit const&,
> tc_petclinic::Visit const&) const':
> petclinic_types.cpp:(.text._ZNKSt4lessIN12tc_petclinic5VisitEEclERKS1_S4_[std::less<tc_petclinic::Visit>::operator()(tc_petclinic::Visit
> const&, tc_petclinic::Visit const&) const]+0x14): undefined reference to
> `tc_petclinic::Visit::operator<(tc_petclinic::Visit const&) const'
> /tmp/ccSEmUDT.o: In function
> `std::less<tc_petclinic::Pet>::operator()(tc_petclinic::Pet const&,
> tc_petclinic::Pet const&) const':
> petclinic_types.cpp:(.text._ZNKSt4lessIN12tc_petclinic3PetEEclERKS1_S4_[std::less<tc_petclinic::Pet>::operator()(tc_petclinic::Pet
> const&, tc_petclinic::Pet const&) const]+0x14): undefined reference to
> `tc_petclinic::Pet::operator<(tc_petclinic::Pet const&) const'
> collect2: ld returned 1 exit status
> make: *** [client] Error 1
>
> petclinic.thrif:
>
> struct PetType {
> 1: i32 id,
> 2: string name
> }
>
> struct Specialty {
> 1: i32 id,
> 2: string name
> }
>
> struct Vet {
> 1: i32 id,
> 2: string firstName,
> 3: string lastName,
> 4: set<Specialty> specialties
> }
>
> struct Visit {
> 1: i32 id,
> 2: i64 date,
> 3: string description,
> 4: i32 petFK
> }
>
> struct Pet {
> 1: i32 id,
> 2: string name
> 3: string birthDate,
> 4: PetType type,
> 5: set<Visit> visits,
> 6: i32 ownerFK,
> 7: i32 typeFK
> }
>
> struct Owner {
> 1: i32 id,
> 2: string firstName,
> 3: string lastName
> 4: i32 account,
> 5: string address,
> 6: string city,
> 7: string telephone,
> 8: set<Pet> pets
> }
>
> service PetClinic {
> void putPetType(1: PetType petType),
> PetType getPetType(1: i32 id),
> void putPet(1: Pet pet),
> Pet getPet(1: i32 id),
> void putVisit(1: Visit visit),
> Visit getVisit(1: i32 id),
> void putOwnerPets(1: i32 ownerId, 2: set<Pet> pets),
> set<Pet> getOwnerPets(1: i32 ownerId),
> void putPetVisits(1: i32 petId, 2: set<Visit> visits),
> set<Visit> getPetVisits(1: i32 petId),
> void putOwner(1: Owner owner),
> Owner getOwner(1: i32 id)
> }
>
> Thanks
>
>
smime.p7s
Description: S/MIME cryptographic signature
