2017-08-14 9 views
0

私は、C++でこのクラスを持っている:セットの演算子[]を作成する方法は?

class Company{ 
    string PhoneNumber; 
    std::set<ER*> Rooms; 
public: 
    // some other functions 
} 

は今、私はこのクラスの演算子=を書きたいと私はセットを通過する問題が生じています

これは私がこれまでに得たものである。

Company& Company::operator=(const Company& company){ 
    if(this==&company){ 
     return *this; 
    } 
    int numRooms=Rooms.size(); 
     for(int i=0;i<numRooms;i++){ 
      delete Rooms[i]; 
     } 
    int numCompanyRooms=company.Rooms.size(); 
     for(int i=0;i<numCompanyRooms;i++){ 
     Rooms[i]= new ER(*company.Rooms[i]); // i get error no match operator [] ! 
       } 
     Rooms=company.Rooms; 
     return *this; 
} 

私がここで間違っていることの助けを借りてください!

+2

非存在 '演算子[]'さておき、あなたはあなたの[ラバーダック](https://en.wikipedia.org/wiki/Rubber_duck_debugging)にあなたのコードを説明する必要があります。 – juanchopanza

+0

'std :: set'は' operator [] 'をオーバーロードしていますか? –

+1

無関係ですが、私は両方のセットのサイズが同じであることを願っています。 – donkopotamus

答えて

0

インデックスでsetの要素にアクセスすることはできません。set全体を反復処理する必要があります。あなたはそれが依存としてERのコピーを作成しようとしている方法を見つける必要があります.Also は、既存のセットを空にするには、明示的にdelete要素、その後companyからRoomsをコピーするclear .Thenを呼び出す必要がある、あなたはCompany.Roomsを反復処理する必要があります定義上のER

Company& Company::operator=(const Company& company) 
{ 
    if(this==&company) 
     return *this; 
    for(auto itr = Rooms.begin(); itr!=Rooms.end(); itr++) 
    { 
     ER* deleteMe = *itr; 
     delete deleteMe; 
    } 
    Rooms.clear();//Empty the set.Note that clear() does not delete so we explicitly called it before. 
    for(auto itr = company.Romms.begin(); itr!=company.Rooms.end(); itr++) 
    { 
     ER* newER = new ER(); 
     //copy *itr into newER in proper way.This depends on 
     //definition of ER.Maybe you can check if there assignment operator 
     //for ER as well and utilize it. 
     Rooms.insert(newER); 
    } 
    return *this;  
} 
0

Setは、要素のインデックスを考慮しません。要素がセットに含まれているかどうかだけです。したがって、Rooms[i]は存在せず、オペレータ[]に過負荷を設定することはできません。

関連する問題