It looks like you are using the set<> container on one of your types, which requires that you implement a comparator, since Thrift doesn't know how to provide one for you.
Since you are using sets, you must provide an implementation of this function in your source code: tc_petclinic::Pet::operator<(tc_petclinic::Pet const&) const -----Original Message----- From: EY Tsai [mailto:[email protected]] Sent: Monday, August 16, 2010 5:22 PM To: [email protected] Subject: Any idea why build failed on cpp? 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
