korzystanie z metod klasy przez wektor obiektów

0

Cześć. Dopiero zaczynam swoją przygodę z programowaniem i napotkałem pewien problem. Stworzyłem dwie klasy - "Pracownik" oraz "Firma".
W klasie Firma chciałbym korzystać z wektora wskaźników na obiekty klasy Pracownik ale mam z tym problem.

firma.hpp

#include <vector>
#include <iostream>

class Pracownik
{
    std::string imie_nazwisko;
    std::string stanowisko;
    int zarobki;
    int przepracowane;
 public:
    Pracownik (std::string name, std::string job, int zl_h) : imie_nazwisko(name), stanowisko(job), zarobki(zl_h){}
    void setDane(std::string dane);
    void setStanowisko(std::string job);
    void setZarobki(int zl_h);
    void setGodziny(int godziny);
    std::string getDane();
    std::string getStanowisko();
    int getZarobki();
    int getGodziny();
    ~Pracownik();
};

class Firma
{
 std::vector<Pracownik*> pracownicy[100];
 int index = 0;
 public:
 void dodaj_pracownika();
 void wypisz_pracownikow();
};

firma.cpp

#include "firma.hpp"
#include <iostream>
#include <vector>

using namespace std;

void Firma::dodaj_pracownika()
{
    string imie, posada;
    int placa;
    cout << "\nImie i nazwisko nowego pracowanika: ";
    getline(cin, imie);
    cout << "\nPosada: ";
    getline(cin, posada);
    cout << "\nZarobki na godzine: ";
    cin >> placa;
    Pracownik *nowy;
    nowy = new Pracownik(imie, posada, placa);
    pracownicy->push_back(nowy);
    index++;
}

void Firma::wypisz_pracownikow()
{
    for(int i = 0; i < index; i++)
    {
        cout << "\nPracownik nr " << i << ":\n";
        cout << pracownicy[i].getDane() << ", ";
        cout << pracownicy[i].getStanowisko() << endl;
        cout << "Zl/h: " << pracownicy[i].getZarobki() << endl;
        cout << "Przepracowane godziny w tym miesiacu: " << pracownicy[i].getGodziny() << endl;
    }
}

Problem jest z void Firma::wypisz_pracownikow() w firma.cpp.
'28 error: class std::vector<Pracownik*>' has no member named 'getDane' - podobny błąd jest z kolejnymi trzema linijkami
Czegoś ewidentnie nie rozumiem i nie jestem sobie w stanie z tym poradzić.
W jaki inny sposób mogę wywołać te metody?

1

std::vector<Pracownik*> pracownicy[100]; nie robi tego, co chcesz, żeby robiło — tylko tworzy tablicę stu wektorów wskaźników do Pracowników. Czemu, tak w ogóle, nie zrobisz wektora Pracowników, tylko kombinujesz coś ze wskaźnikami, i to jeszcze „gołymi”?

0

Odpowiadaj w postach, nie w komentarzach.

No ale — jak Ci każą mieć „tablicę wskaźników”, to pewnie chcą, żebyś miał tablicę wskaźników, czyli i Twój wektor odpada. Więc jak to wyczyścisz, to będziesz się mógł łatwo odwoływać do metod Pracownika.

Pamiętaj o poprawnym wyczyszczeniu tej tablicy, tu jest mnóstwo miejsc, gdzie można mieć wyciek pamięci.

1

zamień:

  • std::vector<Pracownik*> pracownicy[100]; -> std::vector<Pracownik*> pracownicy;
  • pracownicy->push_back(nowy); -> pracownicy.push_back(nowy);
  • pracownicy[i].getDane() -> pracownicy[i]->getDane(), etc.
1

w przypadku kiedy masz wskaźnik to do pól odwołujemy się przez operator ->. U Ciebie w kodzie jest użyty operator kropki, stąd taki komunikat błędu. Dodatkowym problemem jest brak inicjalizacji danych: masz wektor wskaźników, które na razie nie wskazują na żaden obiekt. Każdy element w wektorze/tablicy musisz odpowiednio utworzyć. Możesz do tego celu użyć konstruktor klasy Firma.

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