Problem z kontenerem vector

0

Witam. Pracuję nad aplikacją która będzie przechowywać informację na temat Banku i jego pracowników. Zdecydowałem się na użycie kontenera vector.

vector <Bank>BankList utworzyłem w mainie i dodaje do niego kolejne elementy funkcją zaprzyjaźnioną z klasą Bank void AddBankList(Bank n, vector<Bank>&BankList)
Każdy obiekt klasy bank posiada również vector<Employee>EmployeeList w którym przechowuje informację o swoich pracownikach.

Pracownikow to tego vectora dodaję funkcją zaprzyjaźnioną z klasami Bank i Employee void AddEmployee_Bank(Employee &n, Bank &z).

problem pojawia się gdy wywołuję funkcję void show_employee(vector<Bank>BankList, int j) która ma za zadanie wyswietlac informacje o wszystkich pracownikach danego banku.

class Bank{

string name;
int bank_id;


vector<Employee>EmployeeList;

public:

friend void AddEmployee_Bank(Employee &n, Bank &z);
friend void AddBankList(Bank n, vector<Bank>&BankList);
friend void show_employee(vector<Bank>BankList, int j);    // j - id banku którego pracowników chcemy
};



class Employee{

string name;
int id;

public:

friend void AddEmployee_Bank(Employee &n, Bank &z);
friend void show_employee(vector<Bank>BankList, int j);
};


void AddEmployee_Bank(Employee &n, Bank &z)
{
    cout<<z.EmployeeList.size()<<endl;


if(z.EmployeeList.size()==0)
{
    z.BankList.push_back(n);
    cout<<z.BankList.size()<<endl;
}
else
{
    int i=0;
    while(n.id != z.BankList[i].id && i < z.BankList.size())
    {
        i++;
    }

if(n.id == z.BankList[i].id )
    {

    cout<<"Cant add this employee. Same Id"<<endl;
 

    }
else
    {

    z.BankList.push_back(n);
    cout<<z.BankList.size()<<endl;

    }
}
}

void show_employee(vector<Bank>BankList, int j)  // funkcja przy wywolaniu której wyrzuca blad  taki jak po wyjściu w obszar niezarezerwowanej pamięci
{
    cout<<"Employees of Bank id: "<<j<<endl;

    for(int i=0; i < BankList.size(); i++)
    {
   
        if(BankList[i].bank_id == j)
        {


            for(int z=0; z < (BankList[i].EmployeeList.size())-1 ; z++)
            {
                cout<<"Name of employee"<<BankList[i].EmployeeList[z].name<<endl;
                cout<<"ID of employee"<<BankList[i].EmployeeList[z].id<<endl;
                cout<<endl;
            }
        }

    }



}
1
  1. "funkcją zaprzyjaźnioną": friend to zło.
  2. void AddBankList(Bank n, vector<bank>&BankList): dlaczego nie push_back tak jak wszyscy, tylko musisz wymyślać swoje dziwne rozwiązanie?
  3. void show_employee(vector<bank>BankList, int j): dlaczego nie void show_employee(const bank& Bank) ?

Generalnie cała ta architektura jest do bani. Wyrzuć to do kosza i napisz jeszcze raz.

0
pingwindyktator napisał(a):
  1. "funkcją zaprzyjaźnioną": friend to zło.
  2. void AddBankList(Bank n, vector<bank>&BankList): dlaczego nie push_back tak jak wszyscy, tylko musisz wymyślać swoje dziwne rozwiązanie?
  3. void show_employee(vector<bank>BankList, int j): dlaczego nie void show_employee(const bank& Bank) ?

Generalnie cała ta architektura jest do bani. Wyrzuć to do kosza i napisz jeszcze raz.

2 Ponieważ ta funkcja sprawdza czy dany element nie jest już dodany. Nie dodawałem jej ciała żeby było bardziej przejrzyście
3. Nie wiem, właśnie tutaj mam problem

0
  1. To może jakiś std::set?
0
for(int z=0; z < (BankList[i].EmployeeList.size())-1 ; z++)

Dlaczego -1? Co w przypadku pustego vectora? Size zwraca liczbę bez znaku więc to -1 przekręci się na max i wyjdziesz poza zakres.

0
  1. popraw nazewnictwo!
    Parametry jednoliterowe są niedopuszczalne. A zwłaszcza o nazwach i,j,x,y,z,n (które mają swoje specyficzne znaczenie).
friend void AddEmployee_Bank(Employee &n, Bank &z);
friend void show_employee(vector<Bank>BankList, int j);
  1. Zdecyduj się co chcesz nazwą przekazać:
    a) zdanie po angielsku: show_employee
    b) pseudo-obiektowość: wtedy bank_addEmployee a nie AddEmployee_Bank

  2. Funkcje zaprzyjaźnione raczej niepotrzebne

  3. Nie wiem (może za wcześnie) jak Ci się to kompiluje:
    z.BankList.push_back(n);

  • ukrywasz coś przed nami?

1 użytkowników online, w tym zalogowanych: 0, gości: 1