Очистка вектора <pointer>и последующее его использование - PullRequest
0 голосов
/ 21 мая 2011

Хорошо, у меня есть класс с именем Company (), в котором хранится vector<pointer>; (private)

Тогда у меня есть базовый класс StaffMember (), который имеет два класса с производными (Manager и Casual), которые хранятся в векторе

Я хочу иметь возможность очистить вектор при редактировании списка или удалении из него, но когда я использую такие функции, как Company::StaffMembers.clear();, он вылетает и выдает

"Необработанное исключение в 0x00e182f4 в Payroll System.exe: 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();
};

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 );
}

Ответы [ 2 ]

5 голосов
/ 21 мая 2011

Может быть, вам нужно убедиться, что правильный id был найден. Проверьте, что index != -1 перед выполнением erase.

1 голос
/ 21 мая 2011

Полагаю, ваша программа падает на этой строке:

       if(Company::StaffMembers[i]->getID()==id)

потому что один из элементов в вашем векторе null. Но это только предположение.

Вы должны действительно запустить свой код в отладчике, как только вы поймете, что строка кода, на которой происходит сбой, обнаружит проблему намного легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...