2015-11-05 77 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; } 
}; 
相关问题