C ++构造问题

时间:2015-05-14 21:45:10

标签: c++ construct

我在使用以下代码时遇到了一些问题:

    class Osoba { 
      std::string imie; 
      std::string nazwisko; 
      std::string pesel; 
public: 
      Osoba(const std::string & im, const std::string & na, const std::string & pe); 
      std::string get_imie() const; 
      std::string get_nazwisko() const; 
      std::string get_pesel() const; 
}; 


class Pracownik : public Osoba { 
      int liczba_godzin; 
    public: 
      Pracownik(const std::string & im, const std::string & na, const std::string & pe, int liczba_godzin); 
      Pracownik(const Osoba & o, int liczba_godzin); 
      int podaj_liczbe_godzin() const; 
}; 

我需要编写构造代码。有人能帮助我吗? 我试过这样,但它不起作用:

Osoba::Osoba(const std::string & im, const std::string & na, const std::string & pe):imie(im), nazwisko(na), pesel(pe){};

Pracownik::Pracownik(const std::string & im, const std::string & na, const std::string & pe, int liczba_godzin):imie(im), nazwisko(na),pesel(pe),liczba_godzin(liczba_godzin){} 
Pracownik::Pracownik(const Osoba & o, int liczba_godzin):Osoba(o), liczba_godzin(liczba_godzin){}; 

@edtit 错误记录如下:

 C:\Users\Admin\Desktop\projekt\main.cpp In constructor `Pracownik::Pracownik(const std::string&, const std::string&, const std::string&, int)': 

5 C:\Users\Admin\Desktop\projekt\main.cpp `std::string Osoba::imie' is private     
37 C:\Users\Admin\Desktop\projekt\main.cpp within this context     
37 C:\Users\Admin\Desktop\projekt\main.cpp class `Pracownik' does not have any field named `imie'     
6 C:\Users\Admin\Desktop\projekt\main.cpp `std::string Osoba::nazwisko' is private     
37 C:\Users\Admin\Desktop\projekt\main.cpp within this context     
37 C:\Users\Admin\Desktop\projekt\main.cpp class `Pracownik' does not have any field named `nazwisko'     
7 C:\Users\Admin\Desktop\projekt\main.cpp `std::string Osoba::pesel' is private     
37 C:\Users\Admin\Desktop\projekt\main.cpp within this context     
37 C:\Users\Admin\Desktop\projekt\main.cpp class `Pracownik' does not have any field named `pesel'     
37 C:\Users\Admin\Desktop\projekt\main.cpp no matching function for call to `Osoba::Osoba()'     
 note C:\Users\Admin\Desktop\projekt\main.cpp:4 candidates are: Osoba::Osoba(const Osoba&)     
 note C:\Users\Admin\Desktop\projekt\main.cpp:4                 Osoba::Osoba(const std::string&, const std::string&, const std::string&) 

1 个答案:

答案 0 :(得分:2)

Pracownik需要通过调用Osoba的构造函数来构造基类,如下所示:

Pracownik::Pracownik(const std::string & im, 
const std::string & na,
const std::string & pe,
int liczba_godzin)
: Osoba(im, na, pe)
, liczba_godzin(liczba_godzin)
{}