[英]binary ==: no operator found which takes a left hand operand; vector; iterator
我正在學習向量,現在遇到了一個問題:二進制==:找不到使用“對象”類型的左操作數的運算符。 我發現刪除后沒有須要:
vector<Object>::iterator it = find(list.begin(), list.end(), name);
而且我不知道該怎么辦。 也許你會問這樣的事情
class Object {
private:
string* name;
vector<string>* facts;
public:
//...
}
class ListOfObjects {
private:
vector<Object> list;
public:
void Realise(string* knowledge);
};
void ListOfObjects::Realise(string* knowledge) {
//...
vector<Object>::iterator it = find(list.begin(), list.end(), name);
//...
}
問題是由std::find
使用operator==
來檢查當前選擇中是否存在您要搜索的元素這一事實而給出的。
由於您傳遞了string*
因此在編譯std::find
模板方法時搜索的方法是
bool Object::operator==(string* argument) const
必須實施,其實施將類似於
bool Object::operator==(string* argument) const
{
return *argument == name;
}
但是我發現此解決方案存在潛在的問題:
std::unordered_map<string, vector<string>>
,這將使一切變得容易 operator==
的類型不同的類型的參數重載operator==
,盡管這樣做有效並且可以使用,但在相等性方面沒有多大意義,因為您正在比較兩個不同的類型 string*
(如果要避免復制,請傳遞const std::string&
) 我認為,如果您想以這種方式比較對象,那么您將尋找的內容稱為運算符重載。 這是一個簡短的示例:
http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/
注意如何使用operator==
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.