07.05.06, 14:44
Cześć! Napisałam taki programik ale pojawiają sie błędy kompilacji. Co
poprawić? Konstruktory? Proszę o poradę.


class Indeks
{ public:char imie[10]; char nazwisko[20]; char pesel[11]; char data[10];

Indeks();
Indeks (char *im,char *nazw,char *pes,char *dat);
void wyswietl();
};
class A:
public virtual Indeks
{ int rok;
public:
void wyswietl();
A (char *im, char *nazw , char *pes,int,char *dat);
};
class B:
public virtual Indeks
{ int pensja;
public:
void wyswietl();
B (char *im, char *nazw, char *pes,int,char *dat);
};
class C:
public virtual A, public virtual B
{ int id;
public:

void wyswietl();
C (char *im, char *nazw, char *pes,int,char *dat);
};



Indeks ::Indeks( char *im,char *nazw,char *pes,char *dat)
{ strcpy( imie, im);
strcpy( nazwisko, nazw);
strcpy( pesel, pes);
strcpy( data, dat);
}
void Indeks :: wyswietl()
{
cout<<"Imie: "<<imie<<endl;
cout<<"Nazwisko: "<<nazwisko<<endl;
cout<<"Pesel: "<<pesel<<endl;
cout<<"alarm: \a \a \a \a \a \a \a";
cout<<"Data ur: "<<data<<endl;
}

A :: A (char *im,char *nazw, char *pes,int c,char *dat): Indeks(im,nazw,pes,dat)
{rok=c;}
void A:: wyswietl()
{ Indeks :: wyswietl();
cout<<"rok: "<<rok<<endl;
}
B :: B (char *im, char *nazw, char *pes,int d,char *dat): Indeks(im,nazw,pes,dat)
{ pensja=d;}
void B :: wyswietl()
{ Indeks :: wyswietl();
cout<<"pensja: "<<pensja<<endl;
}
C:: C (char *im, char *nazw, char *pes,int e,char *dat):
A(im,nazw,pes,dat), B(im,nazw,pes,dat), C(im,nazw,pes,dat)
{id=e;}
void C :: wyswietl()
{ A:: wyswietl(); B:: wyswietl();
cout<<"id: "<<id<<endl;
}

int main()
{
A a("Jan","Kowalski", "50684123451",3,"15.06.1984");
B b("Ela","Nowak","12345678911",1200,"30,10,1984");
C x("Ola","Bak","1234567812",1500,"12.23.1980");
a.wyswietl();
b.wyswietl();
x.wyswietl();
system ("pause");
}
Obserwuj wątek
    • piotrpilinko Re: C++ 08.05.06, 09:57
      Ło matko bosko częstochowsko... Co to za dziedziczenie? Najpierw właściwy
      projekt, a potem programowanie...

      Kilka wskazówek:
      1) początek właściwy include:
      #include <iostream>
      using namespace std;

      2) Potem main powinno coś zwrócić, czyż nie? na przykład "return 0;"

      3) Niewłaściwe wywołanie konstruktorów w liście klasy C:
      C::C(char *im, char *nazw, char *pes, int e, char *dat):
      A(im, nazw, pes, e, dat),
      B(im, nazw, pes, e, dat),
      id(e)
      {
      }

      To "coś" ma robić coś sensownego? Bo szkoda tworzyć sztukę dla sztuki...

      Po zmianach program się kompiluje, ale nadal linker wypluwa błąd - struktura
      dziedziczenia do przemyślenia...
      • piotrpilinko Re: C++ 08.05.06, 10:00
        Prawidłowa postać konstruktora C::C(...), to:

        C::C(char *im, char *nazw, char *pes, int e, char *dat):
        Indeks(im, nazw, pes, dat),
        A(im, nazw, pes, e, dat),
        B(im, nazw, pes, e, dat),
        id(e)
        {
        }

        Swoją drogą: dziedziczenie wirtualne to zło (już dziedziczenie wielobazowe to
        zło, ale czasami jest przydatne, chociaż daje duży narzut na wykonanie)...

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka