"No matching function for call to", problem w projekcie.

0

W projekcie ma znajdować się firma z listą pracowników, którzy są osobami(3 klasy). Mianowicie gdy tworzę obiekt Firma wyskakuje powyższy błąd a przyczyny nie mogę znaleźć.
klasy.h

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Osoba
{
    protected:
    string imie;
    string nazwisko;
    string pesel;
public:
    Osoba(string,string,string);
    string get_imie();//podaje imie
    string get_nazwisko();//podaje nazwisko
    string get_pesel();//podaje pesel
};

class Pracownik : public Osoba
{
    int liczba_godzin;
public:
    Pracownik(string ,string ,string ,int);
    int podaj_liczbe_godzin();//podaje liczbe godzin
};

class Firma
{
    string nazwa;
    double stawka_godzinowa;
    vector<Pracownik> pracownicy;
public:
    Firma(string, double );
    void zatrudnij (Pracownik);//zatrudnia pracownika
    void zwolnij (Pracownik);//zwalnia pracownika
    void wyswietl_liste_plac();//wyswietla liste pracownikow
};

klasy.cpp

#include <iostream>
#include <vector>
#include <string>
#include "klasy.h"
Osoba::Osoba(string im="brak", string na="brak", string pe="brak")//przypisuje domyslne
{
    imie=im;
    nazwisko=na;
    pesel=pe;
}
using namespace std;
string Osoba::get_imie()
{
    cin>>imie;
    return imie;
}
string Osoba::get_nazwisko()
{
    cin>>nazwisko;
    return nazwisko;
}
string Osoba::get_pesel()
{
    cin>>pesel;
    return pesel;
}
Pracownik::Pracownik(string im="brak",string na="brak",string pe="brak", int lg=0)//przypisuje domyslne
{
    imie=im;
    nazwisko=na;
    pesel=pe;
    liczba_godzin=lg;
}
int Pracownik::podaj_liczbe_godzin()
{
    cin>>liczba_godzin;
    return liczba_godzin;
}
Firma::Firma(string nw="brak", double st=0)//przypisuje domyslne
{
nazwa=nw;
stawka_godzinowa=st;

}
void Firma::zatrudnij ( Pracownik p){
pracownicy.push_back(p);
}
void Firma::zwolnij (Pracownik p){
    cout<<"Ktorego pracownika zwolnic?"<<endl;
pracownicy.pop_back();
}
double podaj_koszty_pracy();
/*void Firma::wyswietl_liste_plac(){
vector<Pracownik>::iterator it;
   for( it=pracownicy.begin(); it!=pracownicy.end(); ++it )
   {
     cout<< *it <<endl;
   }*/

main.cpp

#include <iostream>
#include <vector>
#include "klasy.h"
using namespace std;

int main()
{
    Firma f1;
    return 0;
}
0

Brakuje ci guardów w pliku nagłówkowym.
Podaj następnym razem pełny błąd.
"No matching function for call to".. a co dalej?

0

Nie ma zdefiniowanego konstruktora domyślnego w klasie Firma.
W metodzie wyswietl_liste_plac używasz niezdefniowanego operatora << dla klasy Pracownik.

Osoba(string, string, string);

wartości domyślne metod (konstruktora) powinny być podane w deklaracji, a nie w definicji.
Nazywaj argumenty w deklaracji, bo taki kod jest mało czytelny.
Używaj angielskich nazw.
Używaj przy dziedziczeniu w klasach pochodnych konstruktorów klasy bazowej.
Korzystaj z listy inicjalizacyjnej konstruktora.
Kod jest do przepisania na nowo.
Używanie using namespace std; w pliku nagłówkowym to bardzo zła paraktyka, bo dodaje
wszędzie gdzie jest dodawany plik globalnie przestrzeń nazw std,a to prowadzi do trudno namierzalnych błędów.

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