Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd z konstruktorem klasy bazowej w klasie pochodnej

Ostatnio zmodyfikowano 2014-04-24 16:38
Autor Wiadomość
Tumeg
Temat założony przez niniejszego użytkownika
Błąd z konstruktorem klasy bazowej w klasie pochodnej
» 2014-04-23 19:02:53
Witam, mam tutaj taki kod:
C/C++
class Osoba
{
public:
    string imie;
    string nazwisko;
   
    Osoba( string imie, string nazwisko );
    void show();
};

class Uczen
    : public Osoba
{
};


void Osoba::show()
{
    cout << this->imie << " -> " << this->nazwisko << endl;
}

Osoba::Osoba( string imie, string nazwisko )
{
    this->imie = imie;
    this->nazwisko = nazwisko;
}

int main()
{
    Osoba os( "Tomasz", "Kowalski" );
    os.show();
    Uczen x;
    return 0;
}
Dopóki nie utworzę obiektu klasy Uczen wszystko jest ok. Po utworzeniu wyrzuca masę błędów:


C:\Documents and Settings\USER\Pulpit\plik.cpp||In constructor 'Uczen::Uczen()':|
C:\Documents and Settings\USER\Pulpit\plik.cpp|18|error: no matching function for call to 'Osoba::Osoba()'|
C:\Documents and Settings\USER\Pulpit\plik.cpp|27|note: candidates are: Osoba::Osoba(std::string, std::string)|
C:\Documents and Settings\USER\Pulpit\plik.cpp|8|note:                 Osoba::Osoba(const Osoba&)|
C:\Documents and Settings\USER\Pulpit\plik.cpp||In function 'int main()':|
C:\Documents and Settings\USER\Pulpit\plik.cpp|37|note: synthesized method 'Uczen::Uczen()' first required here |
||=== Build finished: 1 errors, 0 warnings ===|
Myślę, że to wina konstruktora w klasie bazowej - nie mogę go w żaden sposób "przerobić" tak, aby był widoczny w klasie pochodnej (raczej żeby wszystko normalnie działało).


P-108559
Adik80
» 2014-04-23 19:07:44
Nie masz konstruktora w klasie uczen, kompilator generuje domyslny konstruktor, ale nie moze znalezc domyslnego kosntruktora w klasie osoba.
albo Dodaj wlasny konstruktor w klasie uczen wolajacy Osoba(imie, nazwisko) albo dodaj domyslny konstruktor w klasie osoba: Osoba()
P-108561
Tumeg
Temat założony przez niniejszego użytkownika
» 2014-04-23 19:16:55
C/C++
class Uczen
    : public Osoba
{
    Uczen( string imie, string nazwisko );
};

Uczen::Uczen( string imie, string nazwisko )
{
    Osoba.imie = imie;
    Osoba.nazwisko = nazwisko;
}

Nie za bardzo to działa, jak w tym konstruktorze odwołać się do składowych klasy Osoba ? Zielony jestem :)
P-108564
pekfos
» 2014-04-23 19:30:53
Musisz zdefiniować konstruktor w Uczen, który wywołuje konstruktor Osoba, lub zdefiniować konstruktor domyślny w klasie Osoba.
P-108565
Tumeg
Temat założony przez niniejszego użytkownika
» 2014-04-23 19:35:27
C/C++
class Uczen
    : public Osoba
{
    Osoba( string imie, string nazwisko );
};

Dalej nie działa ;d, nie może ktoś napisać jak to ma wyglądać ?
P-108566
Monika90
» 2014-04-23 20:22:58
A nie przyszło Ci do głowy, żeby sprawdzić w jakiejś książce, albo kursie on-line?
Choćby tu: http://cpp0x.pl/kursy​/Programowanie-obiektowe-C++​/Polimorfizm/Dziedziczenie/494
P-108568
WaxerPL
» 2014-04-24 10:00:54
Też jestem za tym, aby samemu szukać informacji w internecie, ale skoro chodzi o podstawy trzeba jasno wytłumaczyć na przykładzie.


C/C++
class Uczen
    : public Osoba
{
   
    Uczen( string imieu, string nazwiskou )
        : Osoba( imieu, nazwiskou )
    { }
    //To co tutaj zrobiłem nazywa się - lista inicjalizacyjna konstruktora. Zostanie ona wywołana wraz z utworzeniem obiektu Uczeń, lecz aby uczeń "posiadał" imię i nazwisko musisz również przypisać do Ucznia imię i nazwisko. Tutaj od razu podajesz zmienne imienia i nazwiska i przypisujesz je do konstruktora Osoba.
   
};

int main() {
   
    Osoba os( "Jarek", "Kowalski" );
    os.show();
   
    Uczen ucz( "Marek", "Nowak" );
    ucz.show;
   
    return 0;
}


Mam nadzieję, że pomogłem


P-108575
michal11
» 2014-04-24 12:47:00
@Up

Bez przesady, 2 osoby napisały mu co ma zrobić, jedyny wysiłek to znaleźć jakąś informacje na ten temat, przeczytać i zastosować.
P-108588
« 1 » 2
  Strona 1 z 2 Następna strona