好的,所以我有一个名为Company()的类,它存储vector<pointer>;
(私有)
然后我有一个名为StaffMember()的基类,它有两个衍生类 (经理和休闲)存储在矢量
中我希望能够在编辑列表或从中删除时清除向量,但是当我使用Company::StaffMembers.clear();
之类的功能时,它会崩溃并抛出
“Payroll System.exe中0x00e182f4处的未处理异常:0xC0000005:访问冲突读取位置0x00000005。”
我的例外!
我做错了什么!
#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();
};
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 );
}
答案 0 :(得分:5)
也许你需要确保找到了正确的id
。在执行index != -1
之前检查erase
。
答案 1 :(得分:1)
我的猜测是你的程序崩溃在这一行:
if(Company::StaffMembers[i]->getID()==id)
因为向量中的一个元素是null
。但这只是猜测。
你应该在调试器中运行你的代码,一旦你知道你崩溃的代码行就会更容易发现问题。