|
//---------------------------------------------------------------------------
#include <iostream>
#include <list>
#include <string>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
class MailList
{
private:
string name;
string street;
string city;
string state;
string zip;
public:
MailList()
{
name = street = city = state = zip = "";
}
MailList(string n, string s, string c, string st, string z)
{
name = n;
street = s;
city = c;
state = s;
zip = z;
}
string getName() { return name; }
string getCity() { return city; }
string getStreet() { return street; }
string getState() { return state; }
string getZip() { return zip; }
};
bool operator<(MailList &a, MailList &b)
{
return a.getName() < b.getName();
}
bool operator==(MailList &a, MailList &b)
{
return a.getName() == b.getName();
}
void display(list<MailList> &lst)
{
list<MailList>::iterator p;
for(p=lst.begin(); p!=lst.end(); p++)
{
cout << p->getName() << ": ";
cout << p->getStreet() << ", ";
cout << p->getCity() << ", ";
cout << p->getState() << ", ";
cout << p->getZip() << "\n";
}
}
int main()
{
list<MailList> mlstA;
mlstA.push_back( MailList("James, Tom", "1102 W. Henry st", "Mission", "TX", "78572") );
mlstA.push_back( MailList("김성철","둔전리","용인","시","449812") );
mlstA.push_back( MailList("이동철","용인", "용인","시","449812") );
mlstA.sort();
display(mlstA);
system("PAUSE");
return 0;
}
//---------------------------------------------------------------------------
를 컴파일하면
[C++ Error] _function_base.h(73): E2093 'operator<' not implemented in type 'MailList' for arguments of the same type
의 에러가 출력됩니다.
template <class _Tp>
struct less : public binary_function<_Tp,_Tp,bool>
{
bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
};
list 의 sort 멤버 함수가 내부에서 '<' 연산자를 사용할텐데요
그래서 클래스를 변수들을 비교하기 위한 연산자들을 만들어 주었는데...
bool operator<(MailList &a, MailList &b) 가 쓰이질 않고 less 라는 함수객체가 사용되는 것인가요?
참고로 타 컴파일러에서는 문제없이 컴파일됩니다.
답변해 주시면 정말 고맙겠습니다 ^___^
|