tirou Temat założony przez niniejszego użytkownika |
Konstruktor w klasie pochodnej » 2012-10-24 17:02:32 Witam mam pewien problem z klasą pochodną. Otóż stworzyłem klasę pochodną o nazwie pochodna z klasy bazowej o nazwie pracownik . Jednak nie mogę skompilować programu bo wyswietla mi błąd: In constructor 'pochodna::pochodna(int, int)': error: expected primary-expression before 'int' Już nie mam pomysłu, o co tu moze chodzic. Tematem dziedziczenia zainteresowalem sie niedawno wiec byc moze nie do konca pojmuje konstruowanie konstruktorów w klasie pochodnej (gdyż jesli dobrze doczytalem, trzeba uwzglednic konstruktor klasy bazowej, i być możę tu się jakoś walnąłem). Konstruktor klasy bazowej (plik) pracownik.h -> pracownik( int ); , plik pracownik.cpp -> pracownik::pracownik( int wolne ) { wolne = 28; urlop = wolne; } Konstruktor klasy pochodnej plik pochodna.h -> pochodna( int, int ); , plik pochodna.cpp -> pochodna::pochodna( int lat, int wolne ) : pracownik( int wolne ) { wiek = lat; } |
|
mostrom |
» 2012-10-24 17:43:11 Wewnątrz konstruktora klasy pochodnej definiujesz obiek klasy głównej i inicjujesz go zmienną "wolne". Dlaczego dałeś "int wolne" w nawiasie? "wolne" jest argumentem konstruktora klasy pochodnej. Ponadto, jeśli umieszczasz klasy w plikach, to musisz pamiętać, żeby przed użyciem jakiejś klasy, zadeklarować ją. W pliku nagłówkowym pochodnej umieść pustą deklaracje klasy macierzystej. |
|
tirou Temat założony przez niniejszego użytkownika |
» 2012-10-24 18:39:08 Wewnątrz konstruktora klasy pochodnej definiujesz obiek klasy głównej i inicjujesz go zmienną "wolne". |
Nie za bardzo rozumiem tego wyjaśnienia, chodzi ci o takie cos: (jesli nie prosze wytlumacz mi jeszcze raz co jest źle=) pochodna.cpp -> pochodna::pochodna( int lat ) : pracownik( int wolne ) { urlop = wolne; wiek = lat; } Dlaczego dałeś "int wolne" w nawiasie? "wolne" jest argumentem konstruktora klasy pochodnej. |
Wolne jest argumentem klasy bazowej pracownik a nie pochodnej. Ponadto, jeśli umieszczasz klasy w plikach, to musisz pamiętać, żeby przed użyciem jakiejś klasy, zadeklarować ją. W pliku nagłówkowym pochodnej umieść pustą deklaracje klasy macierzystej |
Pusta deklaracja klasy macierzystej (jesli chodzi ci o #include "pracownik.h" ) to zadeklarowałem ją. |
|
mostrom |
» 2012-10-24 18:41:33 Chodziło mi o to: pochodna::pochodna( int lat, int wolne ) : pracownik( wolne ) { wiek = lat; } pracownik.h: class pracownik { public: pracownik( int wiek = 0 ); private: }
pochodna.h: #include "pracownik.h" class pochodna : public pracownik { public: pochodna( int wiek ) : pracownik( wiek ) { } private: }
Napisałem tylko to, jak zrozumiałem Twoją obecną sytuację, bez żadnych szczegółów, schematycznie. Chodzi mi o to, że jeśli nie masz konstruktora domyślnego w klasie macierzystej, tylko przekazujesz jakiś argument, to w klasie pochodnej musisz wypełnić ten argument, bo każda klasa pochodna ma w sobie ukryty obiekt klasy macierzystej, który normalnie się definiuje. W związku z tym musisz podać w konstruktorze kl. pochodnej jaki argument chcesz przekazać obiektowi klasy macierzystej. |
|
tirou Temat założony przez niniejszego użytkownika |
» 2012-10-24 19:07:01 Albo do konca nie rozumiesz moich klas, albo ja nie rozumiem w ogole dziedziczenia :S
W klasie mam zadeklarowac taki konstruktor:
#include "pracownik.h" class pochodna : public pracownik { public: pochodna( int wiek ) : pracownik( wiek ) { } private: }
A definiujesz go tak?:
pochodna::pochodna( int lat, int wolne ) : pracownik( wolne ) { wiek = lat; }
Przeciez te konstruktory sa niezgodne..
Poza tym w klasie bazowej przekazuje argument "wolne" a "wiek" w klasie pochodnej
|
|
tirou Temat założony przez niniejszego użytkownika |
» 2012-10-24 19:18:18 Juz zrozumiałem, gdzie miałem błąd. Dziekuje ci kolego "mostrom" za wszelka pomoc.
Błąd był tutaj tlyko:
pochodna::pochodna( int lat, int wolne ) : pracownik( wolne ) { wiek = lat; }
|
|
« 1 » |