清除矢量<pointer>然后重复使用它

0 c++ polymorphism virtual exception vector

好的,所以我有一个名为Company()的类存储vector<pointer>;(私有)

然后我有一个名为StaffMember()的基类,它有两个存储在向量中的衍生类(Manager和Casual)

我希望能够在编辑列表时清除向量或从中删除向量但是当我使用Company::StaffMembers.clear();它等功能时崩溃并抛出一个

"Payroll System.exe中0x00e182f4处的未处理异常:0xC0000005:访问冲突读取位置0x00000005."

我个例外!

我究竟做错了什么!


Company.h

#include "StaffMember.h"
#include "Manager.h"
#include "Casual.h"
#include <vector>
using namespace std;

class Company
{
private:
    vector<StaffMember*> StaffMembers;
public:
    Company();
    void addEmployee( StaffMember* pp );

    void editEmployee( int id, string fname, string lname, double salary );
    void editEmployee( int id, string fname, string lname, int hours, double rate );

    void deleteEmployee( int id );
    StaffMember* getStaffMember( int id );
    int StaffMemberCount();
};
Run Code Online (Sandbox Code Playgroud)

Company.cpp

void Company::deleteEmployee( int id )
{
    // Impossible
    // Can not delete from vector

    // index will be the id of the employee
    int index = (-1);
    int size = Company::StaffMembers.size();

    for(int i=0;i<size;i++)
    {
        // If the current member's id is the same as the one we are looking for
        if(Company::StaffMembers[i]->getID()==id)
        {
            index=i;
            break;
        }
    }

    // Index is the id of the Employee we wish to delete
    Company::StaffMembers.erase(Company::StaffMembers.begin() + index );
}
Run Code Online (Sandbox Code Playgroud)

edu*_*ffy 5

也许你需要确保id找到正确的.index != -1在执行之前检查一下erase.