2015-11-05 82 views
2

我很困惑的錯誤:替換算法C++無效操作數的二進制表示

error:invalid operands to binary expression ('Record' and 'const Record')

我無法理解爲什麼我的代碼:

replace(phoneBook.begin(),phoneBook.end(),old_r,new_r) 

將得到錯誤。 const Record是什麼意思?

using namespace std; 
class Record{ 
    public: 
      string name; 
      int number; 
}; 
int main(){ 


    vector <Record> phoneBook; 
    string command; 
    while (cin >> command) { 

      if(command == "Update"){ // Handle the Update command 
       Record new_r; 
       Record old_r; 
       int number; 
       cin>>new_r.name>>new_r.number; 
       vector<Record>::iterator itr; 
       for(itr=phoneBook.begin();itr!=phoneBook.end();itr++){ 
        if((*itr).name==new_r.name){ 
         old_r.number=(*itr).number; 
         old_r.name=(*itr).name; 
        } 
       } 

       replace(phoneBook.begin(),phoneBook.end(),old_r, new_r); 


      } 

    } 

} 
+2

代碼缺少包括實際上再現什麼。然後你會看到,實際的錯誤是:「error:'operator =='不匹配(操作數類型是'Record'和'const Record')」 –

回答

0

你需要重寫==運營商在你的記錄類,因爲的std ::更換用它來看看你的元素是否相等。

+0

很清楚!謝謝 –

2

給記錄一個運算符==它會編譯。喜歡的東西:

class Record{ 
    public: 
     string name; 
     int number; 
     bool operator==(const Record& rhs){ 
      if ((this->name==rhs.name) and (this->number==rhs.number)) 
       return true; 
      return false; 
     } 
}; 
0

的模板std::replace功能需要檢查每一個元素是否等於old_r,以決定是否有與new_r更換。該比較使用operator==進行。由於您沒有編寫這樣的操作符,因此編譯器不開心。

添加operator==遊覽Record類:

class Record { 
public: 
    string name; 
    int number; 
    bool operator==(const Record& other) { return name == other.name && number == other.number; } 
}; 
相關問題