2017-06-09 2 views
0

J'ai un problème pour supprimer un « membre » d'un « groupe » par l'indice:Comment effacer un élément d'un vecteur de vecteurs?

#include <vector> 
#include <string> 
using namespace std; 

class Member 
{ 
    public: 
    explicit Member(const string &name, const unsigned long &key) : m_name(name), m_key(key) {} 
    const string &getName() const {return m_name;}; 
    const unsigned long &getKey() const {return m_key;}; 

    private: 
    string m_name; 
    unsigned long m_key; 
}; 
//------------------------------------------------------------------------ 
class Group 
{ 
public: 
    explicit Group(const string &name) : m_name(name) {} 
    const string &getName() const {return m_name;}; 
    void addMember(const Member &member) {m_member.push_back(member);}; 
    const vector<Member> &getMember() const {return m_member;}; 

    private: 
    string m_name; 
    vector<Member> m_member; 
}; 

void main() { 
    vector<Group> group; 
    group.push_back(Group("Membergroup 1")); 
    group[0].addMember(Member("Mark", 123456)); 
    group[0].addMember(Member("John", 234567)); 
    group[0].getMember().erase(group[0].getMember().begin() + 1); //to delete John 
} 

Erreur:: en passant « const std :: vector » comme « ce » argument de défausse qualificatifs groupe [-fpermissive] [_group] .getMember(). erase (groupe [_group] .getMember(). begin() + 1);

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

1

Le problème est ici:

const vector<Member> &getMember() const {return m_member;}; 

La fonction getMember() (que je vous suggère d'appeler comme getMembers()) retourne un const référence au vecteur. Depuis le constness, le compilateur empêche les modifications.

Vous pouvez corriger tout refactorisation de la manière suivante:

class Group 
{ 
public: 
    // ... 
    const vector<Member>& getMembers() const { return m_member; } 
    vector<Member>& getMembers() { return m_member; } 
    // ...