c++ - "String Iterators Incompatible" error message when running bubble sort program -


i beginner trying bubble sort vector of objects in c++. goal sort vector member variables of each object element's member variable. in end, attributes off vector elements same, sorted in different order. when run program, following message:

enter image description here

here code:

    void sortinventory(vector<vehicle> &carlist)     {     bool swap;           vehicle temp;            {         swap = false;          (int count = 0; count < carlist.size(); count++)         {              transform(carlist[count].getvin().begin(), carlist[count].getvin().end(), carlist[count].getvin().begin(), ::tolower);              if (carlist[count].getvin() > carlist[count + 1].getvin())             {                 temp = carlist[count];                                           carlist[count] = carlist[count + 1];                 carlist[count + 1] = temp;                 swap = true;                 }         }      } while (swap); } 

here class declaration:

class vehicle { private:     string vin;  public:     string getvin();     void   setvin(string);  }; 

here class implementation:

string vehicle::getvin() {   return vin;     }  void vehicle::setvin(string input) {   vin = input;    } 

by way, aware not using efficient methods, starting learn language , learning write code.

i asked question similar here. however, none of answers got me wanted go, although feel going in right direction.

as jxh says, transform line fails because making iterators separate string objects. why not try making transform separate routine? if want fancy can define inside sort routine lambda function. or can make separate routine defined separately.

// returns lower case version of string std::string lower_case(std::string vin_number){    auto begin = std::begin(vin_number);   auto end = std::end(vin_number);    // code acting on 1 fixed string   std::transform(begin, end, begin, ::tolower);    return vin_number;   } 

then when comparison, like

if ( lower_case(carlist[count].getvin()) > lower_case(carlist[count + 1]).getvin()) )