我想把对象放到set中,据我所知,我需要重载operator<为了那个原因。所以我想出了类似的东西:
bool Client::operator< (Category &cC1, Category &cC2){
return cC1.getName() < cC2.getName();
}
// Setters----------------------------------------------------------------
void Client::addNewCategory(const string &categName){
Category cat(categName);
i->categoriesMap.insert(i->categoriesMapPos++, cat);
}
我是指向内部类的指针,其中定义了categories categories及其迭代器。
所以我重载了运算符&lt;,但它仍然不起作用,我得到一个错误,操作符有太多的参数(但我怎么能比较没有两个对象的对象)?此外,我收到错误5 IntelliSense: class "ExpenseManagerNamespace::Client" has no member "operator<"
我使用visual studio 2013。
答案 0 :(得分:2)
使操作员成为免费(非成员)功能:
bool operator< (Category const& cC1, Category const& cC2){
return cC1.getName() < cC2.getName();
}
如果getName
不公开,您可能必须为该功能提供友谊。
operator<
的成员函数版本用于将某些其他对象与this
进行比较。这可能不是您想要的,因为在您的情况下this
类型为Client
,您似乎想要比较两个Category
。