Попробуйте это:
struct gr_log
{
string name;
string category;
string description;
float cost;
bool operator==(const string& name) {
return name == this->name;
}
};
Это создает оператор ==
(используя правильный синтаксис для переменной-члена; он сравнивает явный аргумент с неявным this
), который сравнивает gr_log
до string
.Так как ваш std::find
вызов использует строку в качестве объекта сравнения, вам будет хорошо.
В качестве альтернативы вы можете определить операторы равенства вне вашего класса:
struct gr_log
{
string name;
string category;
string description;
float cost;
};
inline bool operator==(const gr_log& gr, const string& name) {
return name == gr.name;
}
inline bool operator==(const sting& name, const gr_log& gr) {
return name == gr.name;
}
Примечание 1: ключевые слова inline
должны присутствовать, если вы помещаете их в файл заголовка, но не если вы помещаете их в исходный файл.
Примечание 2: Указание обеих функций оператора допускает коммутативныйсвойство равенства.
Наконец, если это не было хэшировано достаточно - оператор равенства члена принимает один параметр, оператор равенства не члена принимает two .