Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - jaki konstruktor przy dziedziczeniu wirtualnym wielobazowym

jowyma 03 Maj 2015 19:42 423 3
  • #1 03 Maj 2015 19:42
    jowyma
    Poziom 22  

    Proszę o pomoc jak stworzyć poprawny konstruktor (i domyślny i z parametrami) jeżeli moja klasa dziedziczy wirtualnie po dwóch bazach podstawowych. Nie wiem dlaczego, ale kompilator odmawia inicjalizacji jednego z elementów na liście inicjalizacyjnej.
    Mogę tę kłopotliwą zmienną ("rokstudiow", dziedziczona po klasie Student) zainicjować wewnątrz funkcji kreatora. Wtedy wszystko działa. Ale nie mogę tego zrobić na liście inicjalizacyjnej i nie rozumiem dlaczego.


    Oto komunikat o błędzie:
    "
    doktorant.cpp: In constructor ‘Doktorant::Doktorant()’:
    doktorant.cpp:10:90: error: class ‘Doktorant’ does not have any field named ‘rokstudiow’
    Doktorant::Doktorant(): Pracownik("Krzysztof", "Kudełko", Data(1,1,1990), "asystent"), rokstudiow(5)
    ^
    doktorant.cpp: In constructor ‘Doktorant::Doktorant(std::string, std::string, Data, std::string, int, Harmonogram*)’:
    doktorant.cpp:21:120: error: class ‘Doktorant’ does not have any field named ‘rokstudiow’
    Doktorant::Doktorant(string im, string na, Data d, std::string s, int roks, Harmonogram * p): Pracownik(im, na, d, s), rokstudiow(roks)
    ^
    make: *** [doktorant.o] Błąd 1
    "

    A oto klasa:


    Plik nagłówkowy:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod



    I definicje:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 3
  • Pomocny post
    #2 03 Maj 2015 20:28
    -psiak-
    Poziom 32  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    1
  • #3 03 Maj 2015 21:03
    gaskoin
    Poziom 38  

    Podstawowy błąd jest taki, że nie powinno się dziedziczyć, jeśli nie ma się zamiaru korzystać z polimorfizmu. W językach obiektowych powinniśmy dziedziczyć zachowania a nie struktury.

    1
  • #4 03 Maj 2015 22:37
    jowyma
    Poziom 22  

    Bardzo dziękuję za pomoc Psiakowi, o to chodziło. Co do argumentów gaskoln to się zgadzam, ale z pewnych powodów tutaj konieczne było zastosowanie takiego dziedziczenia.

    0