错误E2093 c ++

时间:2014-05-03 17:26:20

标签: c++ compilation

我收到这个奇怪的错误,我以前从未见过它,甚至不知道它意味着什么,请帮我一把......

 #include<iostream>
    #include<map>
    #include<algorithm>
    using namespace std;
    class Person
{
  private:
   int code;
   string name;
  public:  
   Person(int cod,string nom);
   void setcode(int cod);
   void setname(string nom);
   int getcode();
   string getname();
};
    Person::Person(int cod,string nom){code=cod;name=nom;}
    void Person::setcode(int cod){code=cod;}
    void Person::setname(string nom){name=nom;}
    int Person::getcode(){return code;}
    string Person::getname(){return name;}

    int main ()
{
  map<Person,string>human;

  human.insert(make_pair(Person(15,"LewinVillar"),"primero"));
  human.insert(make_pair(Person(17,"GeanSosa"),"segundo"));
  human.insert(make_pair(Person(20,"WillyRamos"),"tercero"));
  human.insert(make_pair(Person(35,"WillyRojas"),"cuarto"));
  human.insert(make_pair(Person(40,"CuchoSalas"),"quinto"));

}

这是我得到的错误

Error E2093 C:\Program Files (x86)\Borland\CBuilder6\Include\stl/_function_base.h 73: 'operator<' not implemented in type 'Person' for arguments of the same typ
const Person &,const Person &) const

1 个答案:

答案 0 :(得分:2)

std::map中使用类型作为键时,地图需要operator<对其包含的元素进行排序。你需要添加:

friend inline bool operator<( const Person& lhs, const Person& rhs )
{
    return lhs.code < rhs.code;
}

(或其他适当的东西)到你的班级。如果你使用code的getter,它也可以是课后的自由函数,有几个选项。