Dodawanie obiektów do tablicy wskaźników

0

Witam,
Piszę program i napotkałem bląd, a dokładnie gdy chce dodać pracownika do "firmy" to wywala mi błąd, jakieś pomysły jak to zapisać ?

using namespace std;
class Pracownik {
private:
	string imie;
	string nazwisko;
	string stanowisko;
	float zarobki_h;
public:
	string getImie() { return imie; };
	void setImie(string i) { i = imie; };

	string getNaziwsko() { return nazwisko; };
	void setNazwisko(string n) { n = nazwisko; };

	string getStanowisko() { return stanowisko; };
	void setStanowisko(string s) { s = stanowisko; };

	float getZarobki_h() { return zarobki_h; };
	void setZarobki_h(float z) { z = zarobki_h; };


	Pracownik(string i, string n, string s, float z) {
		i = imie;
		n = nazwisko;
		s = stanowisko;
		z = zarobki_h;
	}
};
class Firma {
public:
	Pracownik *tablica[100];
	void dodajPracownika() {
		int rozmiar;
		Pracownik *d1 = new Pracownik;
	}
0

No właśnie jest to zadanie w którym muszę użyć wskaźników a Pracownik *d1 = new Pracownik; nie działa

0

zdefiniowałeś konstruktor Pracownik(string i, string n, string s, float z) to powinieneś wywołać new Pracownik("jan", "kowalski", "nowak", 4.0);
Jeśli chcesz żeby można było tworzyć pustego Pracownika dopisz wartości domyślne np.
Pracownik(string i = "default", string n = "default", string s = "default", float z = 1.0)
albo stwórz drugi kontruktor bezparametrowy:
Pracownik();

1
 Pracownik(string i, string n, string s, float z) {
        i = imie;
        n = nazwisko;
        s = stanowisko;
        z = zarobki_h;
    }

przypisujesz argumentom swojego konstruktora wartości składowych klasy. Czy aby na pewno to miałeś na myśli? ogółem przypisujesz wszystko na odwrót.

 Pracownik(string i, string n, string s, float z) {
        imie = i;
        nazwisko = n;
        stanowisko = s;
        zarobki_h = z;
    }
0
public:
	Pracownik *tablica[100];
	void dodajPracownika() {
		string imie;
		string nazwisko;
		string stanowisko;
		float zarobki_h;
		cout << "Podaj imie: ";
		cin >> imie;
		cout << "Podaj nazwisko: ";
		cin >> nazwisko;
		cout << "Podaj stanowisko: ";
		cin >> stanowisko;
		cout << "Podaj zarobki: ";
		cin >> zarobki_h;
		Pracownik *d1 = new Pracownik(imie,nazwisko,stanowisko,zarobki_h);
	}

Tylko teraz nie za bardzo rozumiem po co miałem pisać te gety i sety, jeżeli wszystko znowu muszę pisać od nowa

0

Bo jakbym chciał wypisać sobie wszystkich pracowników to musiałbym zrobić pętle i od nowa te wszystkie dane wypisywać, trochę bez sensu

0
#include <iostream>
#include <string>
#include <cstddef>

static const std::size_t MAX_PRACOWNIKOW = 100;

class Pracownik {
public:
    Pracownik(const std::string& i, const std::string& n,
        const std::string& s, float z)
        : imie(i), nazwisko(n), stanowisko(s), zarobki_h(z) {
    }

    void wyswietl() const {
        std::cout << "Pracownik: " << imie << ' ' << nazwisko << '\n'
          << "Pracuje na stanowisku: " << stanowisko << '\n'
          << "Zarabia: " << zarobki_h << "\n\n";
    }

private:
    std::string imie;
    std::string nazwisko;
    std::string stanowisko;
    float zarobki_h;
};

class Firma {
public:
    Firma()
        : ilosc_pracownikow(0) {}

    void dodajPracownika(const std::string& imie, const std::string& nazwisko,
        const std::string& stanowisko, float zarobki) {
        Pracownik *d1 = new Pracownik(imie, nazwisko, stanowisko, zarobki);
        if(ilosc_pracownikow < MAX_PRACOWNIKOW) {
            tablica[ilosc_pracownikow] = d1;
            ++ilosc_pracownikow;
        }
        // Powyżej 100 pracowników, będą ignorowani.
    }

    ~Firma() {
        while(ilosc_pracownikow--) {
            delete tablica[ilosc_pracownikow];
        }
    }
private:
    std::size_t ilosc_pracownikow;
    Pracownik *tablica[MAX_PRACOWNIKOW];
};

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