| zabsontoziomal Temat założony przez niniejszego użytkownika | Dziedziczenie wielokrotne » 2016-05-06 12:13:54 Witam.            Gdy stworzyłem nową klasę Doktorant dziedzicząca wielokrotnie po Prowadzący(dziedziczy z Człowiek) i Stud2st(dziedziczy z Student, a Student z Czlowiek). I mam problem z tablicą do której wpisuję ulubioneKsiazki, ulubionePrzedmioty gdyż program się kompiluje, ale podczas wpisywania do nich danych gdy zostały wywołane wywala błąd 11 a w debuggerze napisane jest: EXCBADACCESS (code=1, address=0x0). Co może być problem w tym kodzie bo nie mogę się doszukać, jakieś pomysły?  #include <iostream>#include <string>
 
 using namespace std;
 
 class Czlowiek {
 public:
 Czlowiek() {
 }
 Czlowiek( int wielkoscKsiazki, int rozmiarLicznik ) {
 licznik++;
 
 n = wielkoscKsiazki;
 ulubioneKsiazki = new std::string[ n ];
 
 obiekty = rozmiarLicznik;
 tablica = new int[ obiekty ];
 
 for( int i = 0; i < obiekty; i++ ) {
 tablica[ i ] = licznik;
 }
 
 }
 virtual ~Czlowiek() {
 
 }
 public:
 int wiek, obiekty;
 std::string plec;
 std::string imie;
 std::string nazwisko;
 std::string * ulubioneKsiazki;
 int n;
 friend class Student;
 friend class Prowadzacy;
 friend class Student2;
 int * tablica;
 static int licznik;
 public:
 
 friend std::istream & operator >>( std::istream & we, Czlowiek & _czlowiek ) {
 std::cout << std::endl;
 std::cout << "Podaj imie: ";
 we >> _czlowiek.imie;
 
 std::cout << "Podaj nazwisko: ";
 we >> _czlowiek.nazwisko;
 
 std::cout << "Podaj plec: ";
 we >> _czlowiek.plec;
 
 std::cout << "Podaj wiek: ";
 we >> _czlowiek.wiek;
 
 std::cout << "Podaj ulubione ksiazki: ";
 for( int i = 0; i < _czlowiek.n; i++ ) {
 we >> _czlowiek.ulubioneKsiazki[ i ];
 }
 
 return we;
 }
 
 friend std::ostream & operator <<( std::ostream & wy, const Czlowiek & _czlowiek ) {
 wy << "Imie: " << _czlowiek.imie << std::endl
 << "Nazwisko: " << _czlowiek.nazwisko << std::endl
 << "Plec: " << _czlowiek.plec << std::endl
 << "Wiek: " << _czlowiek.wiek << std::endl
 << "Ulubione ksiazki: ";
 for( int i = 0; i < _czlowiek.n; i++ ) {
 wy << _czlowiek.ulubioneKsiazki[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Licznik obiektow: ";
 for( int i = 0; i < _czlowiek.obiekty; i++ ) {
 wy << _czlowiek.tablica[ i ] << std::endl;
 }
 
 return wy;
 }
 
 };
 
 int Czlowiek::licznik = 0;
 
 
 class Student
 : virtual public Czlowiek
 {
 public:
 Student()
 : Czlowiek()
 {
 }
 Student( int rozmiarKsiazki, int rozmiarLicznik, int rozmiarPrzedmioty )
 : Czlowiek( rozmiarKsiazki, rozmiarLicznik )
 {
 ulubionePrzedmiotyRozmiar = rozmiarPrzedmioty;
 ulubionePrzedmioty = new std::string[ ulubionePrzedmiotyRozmiar ];
 }
 ~Student() {
 
 }
 public:
 int indeks;
 int semestr;
 std::string kierunek;
 std::string wydzial;
 std::string * ulubionePrzedmioty;
 int ulubionePrzedmiotyRozmiar;
 friend class Student2;
 public:
 
 friend std::istream & operator >>( std::istream & we, Student & _student ) {
 std::cout << std::endl;
 std::cout << "Podaj imie: ";
 we >> _student.imie;
 
 std::cout << "Podaj nazwisko: ";
 we >> _student.nazwisko;
 
 std::cout << "Podaj plec: ";
 we >> _student.plec;
 
 std::cout << "Podaj wiek: ";
 we >> _student.wiek;
 
 std::cout << "Podaj ulubione ksiazki: ";
 for( int i = 0; i < _student.n; i++ ) {
 we >> _student.ulubioneKsiazki[ i ];
 }
 
 std::cout << "Podaj nr indeksu: ";
 we >> _student.indeks;
 
 std::cout << "Podaj semestr: ";
 we >> _student.semestr;
 
 std::cout << "Podaj kierunek: ";
 we >> _student.kierunek;
 
 std::cout << "Podaj wydzial: ";
 we >> _student.wydzial;
 
 std::cout << "Podaj ulubione przedmioty: ";
 for( int i = 0; i < _student.ulubionePrzedmiotyRozmiar; i++ ) {
 we >> _student.ulubionePrzedmioty[ i ];
 }
 
 return we;
 }
 
 
 friend std::ostream & operator <<( std::ostream & wy, const Student & _student ) {
 wy << "Imie: " << _student.imie << std::endl
 << "Nazwisko: " << _student.nazwisko << std::endl
 << "Plec: " << _student.plec << std::endl
 << "Wiek: " << _student.wiek << std::endl
 << "Ulubione ksiazki: ";
 for( int i = 0; i < _student.n; i++ ) {
 wy << _student.ulubioneKsiazki[ i ] << std::endl;
 }
 wy << "Numer indeksu: " << _student.indeks << std::endl
 << "Semestr: " << _student.semestr << std::endl
 << "Kierunek: " << _student.kierunek << std::endl
 << "Wydzial: " << _student.wydzial << std::endl
 << "Ulubione przedmioty: ";
 for( int i = 0; i < _student.ulubionePrzedmiotyRozmiar; i++ ) {
 wy << _student.ulubionePrzedmioty[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Licznik obiektow: ";
 for( int i = 0; i < _student.obiekty; i++ ) {
 wy << _student.tablica[ i ] << std::endl;
 
 }
 return wy;
 }
 
 
 
 };
 
 
 class Prowadzacy
 : virtual public Czlowiek
 {
 public:
 Prowadzacy()
 : Czlowiek()
 {
 }
 Prowadzacy( int rozmiarKsiazki, int rozmiarLicznik )
 : Czlowiek( rozmiarKsiazki, rozmiarLicznik )
 {
 }
 ~Prowadzacy() {
 }
 public:
 std::string tytul;
 int publikacje;
 public:
 
 friend std::istream & operator >>( std::istream & we, Prowadzacy & _prowadzacy ) {
 std::cout << std::endl;
 std::cout << "Podaj imie: ";
 we >> _prowadzacy.imie;
 
 std::cout << "Podaj nazwisko: ";
 we >> _prowadzacy.nazwisko;
 
 std::cout << "Podaj plec: ";
 we >> _prowadzacy.plec;
 
 std::cout << "Podaj wiek: ";
 we >> _prowadzacy.wiek;
 
 std::cout << "Podaj ulubione ksiazki: ";
 for( int i = 0; i < _prowadzacy.n; i++ )
 {
 we >> _prowadzacy.ulubioneKsiazki[ i ];
 }
 
 std::cout << "Podaj tytul naukowy: ";
 we >> _prowadzacy.tytul;
 
 std::cout << "Podaj liczbe publikacji: ";
 we >> _prowadzacy.publikacje;
 
 return we;
 
 }
 
 friend std::ostream & operator <<( std::ostream & wy, const Prowadzacy & _prowadzacy ) {
 wy << "Imie: " << _prowadzacy.imie << std::endl
 << "Nazwisko: " << _prowadzacy.nazwisko << std::endl
 << "Plec: " << _prowadzacy.plec << std::endl
 << "Wiek: " << _prowadzacy.wiek << std::endl
 << "Ulubione ksiazki: ";
 for( int i = 0; i < _prowadzacy.n; i++ ) {
 wy << _prowadzacy.ulubioneKsiazki[ i ] << std::endl;
 }
 wy << "Tytul: " << _prowadzacy.tytul << std::endl
 << "Publikacje: " << _prowadzacy.publikacje << std::endl;
 wy << "Licznik obiektow: ";
 for( int i = 0; i < _prowadzacy.obiekty; i++ ) {
 wy << _prowadzacy.tablica[ i ] << std::endl;
 
 }
 
 return wy;
 }
 
 
 };
 
 
 class Stud2st
 : public Student
 {
 public:
 Stud2st()
 : Student()
 {
 }
 Stud2st( int rozmiarKsiazki, int rozmiarLicznik, int rozmiarPrzedmioty )
 : Student( rozmiarKsiazki, rozmiarLicznik, rozmiarPrzedmioty )
 {
 srednia = new double[ semestr ];
 }
 ~Stud2st() {
 
 }
 public:
 std::string stopien;
 double * srednia;
 public:
 
 friend std::istream & operator >>( std::istream & we, Stud2st & _stud2st ) {
 std::cout << std::endl;
 std::cout << "Podaj imie: ";
 we >> _stud2st.imie;
 
 std::cout << "Podaj nazwisko: ";
 we >> _stud2st.nazwisko;
 
 std::cout << "Podaj plec: ";
 we >> _stud2st.plec;
 
 std::cout << "Podaj wiek: ";
 we >> _stud2st.wiek;
 
 std::cout << "Podaj ulubione ksiazki: ";
 for( int i = 0; i < _stud2st.n; i++ ) {
 we >> _stud2st.ulubioneKsiazki[ i ];
 }
 
 std::cout << "Podaj numer indeksu: ";
 we >> _stud2st.indeks;
 
 std::cout << "Semestr: ";
 we >> _stud2st.semestr;
 
 std::cout << "Kierunek: ";
 we >> _stud2st.kierunek;
 
 std::cout << "Wydzial: ";
 we >> _stud2st.wydzial;
 
 std::cout << "Podaj ulubione przedmioty: ";
 for( int i = 0; i < _stud2st.ulubionePrzedmiotyRozmiar; i++ ) {
 we >> _stud2st.ulubionePrzedmioty[ i ];
 }
 
 std::cout << "Podaj stopien naukowy: ";
 we >> _stud2st.stopien;
 
 std::cout << "Podaj srednia z semestrow: ";
 for( int i = 0; i < _stud2st.semestr; i++ )
 {
 we >> _stud2st.srednia[ i ];
 }
 
 return we;
 }
 
 friend std::ostream & operator <<( std::ostream & wy, const Stud2st & _stud2st ) {
 wy << "Imie: " << _stud2st.imie << std::endl
 << "Nazwisko: " << _stud2st.nazwisko << std::endl
 << "Plec: " << _stud2st.plec << std::endl
 << "Wiek: " << _stud2st.wiek << std::endl
 << "Ulubione ksiazki: ";
 for( int i = 0; i < _stud2st.n; i++ ) {
 wy << _stud2st.ulubioneKsiazki[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Numer indeksu: " << _stud2st.indeks << std::endl
 << "Semestr: " << _stud2st.semestr << std::endl
 << "Kierunek: " << _stud2st.kierunek << std::endl
 << "Wydzial: " << _stud2st.wydzial << std::endl
 << "Ulubione przedmioty: ";
 for( int i = 0; i < _stud2st.ulubionePrzedmiotyRozmiar; i++ ) {
 wy << _stud2st.ulubionePrzedmioty[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Stopien naukowy: " << _stud2st.stopien << std::endl
 << "Srednia: ";
 for( int i = 0; i < _stud2st.semestr; i++ ) {
 wy << _stud2st.srednia[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Licznik obiektow: ";
 for( int i = 0; i < _stud2st.obiekty; i++ ) {
 wy << _stud2st.tablica[ i ] << std::endl;
 
 }
 
 return wy;
 }
 
 
 };
 
 
 class Doktorant
 : public Stud2st
 , public Prowadzacy
 {
 public:
 Doktorant()
 : Stud2st()
 , Prowadzacy()
 {
 }
 Doktorant( int rozmiarKsiazki, int rozmiarLicznik, int rozmiarPrzedmioty )
 : Stud2st( rozmiarKsiazki, rozmiarLicznik, rozmiarPrzedmioty )
 , Prowadzacy( rozmiarKsiazki, rozmiarLicznik )
 {
 }
 ~Doktorant() {
 }
 public:
 
 
 public:
 friend std::istream & operator >>( std::istream & we, Doktorant & _doktorant ) {
 std::cout << std::endl;
 std::cout << "Podaj imie: ";
 we >> _doktorant.imie;
 
 std::cout << "Podaj nazwisko: ";
 we >> _doktorant.nazwisko;
 
 std::cout << "Podaj plec: ";
 we >> _doktorant.plec;
 
 std::cout << "Podaj wiek: ";
 we >> _doktorant.wiek;
 
 std::cout << "Podaj ulubione ksiazki: ";
 for( int i = 0; i < _doktorant.n; i++ ) {
 we >> _doktorant.ulubioneKsiazki[ i ];
 }
 
 std::cout << "Podaj numer indeksu: ";
 we >> _doktorant.indeks;
 
 std::cout << "Semestr: ";
 we >> _doktorant.semestr;
 
 std::cout << "Kierunek: ";
 we >> _doktorant.kierunek;
 
 std::cout << "Wydzial: ";
 we >> _doktorant.wydzial;
 
 std::cout << "Podaj ulubione przedmioty: ";
 for( int i = 0; i < _doktorant.ulubionePrzedmiotyRozmiar; i++ ) {
 we >> _doktorant.ulubionePrzedmioty[ i ];
 }
 
 std::cout << "Podaj stopien naukowy: ";
 we >> _doktorant.stopien;
 
 std::cout << "Podaj liczbe publikacji: ";
 we >> _doktorant.publikacje;
 
 std::cout << "Podaj srednia z semestrow: ";
 for( int i = 0; i < _doktorant.semestr; i++ )
 {
 we >> _doktorant.srednia[ i ];
 }
 
 return we;
 }
 
 friend std::ostream & operator <<( std::ostream & wy, const Doktorant & _doktorant ) {
 wy << "Imie: " << _doktorant.imie << std::endl
 << "Nazwisko: " << _doktorant.nazwisko << std::endl
 << "Plec: " << _doktorant.plec << std::endl
 << "Wiek: " << _doktorant.wiek << std::endl
 << "Ulubione ksiazki: ";
 for( int i = 0; i < _doktorant.n; i++ ) {
 wy << _doktorant.ulubioneKsiazki[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Numer indeksu: " << _doktorant.indeks << std::endl
 << "Semestr: " << _doktorant.semestr << std::endl
 << "Kierunek: " << _doktorant.kierunek << std::endl
 << "Wydzial: " << _doktorant.wydzial << std::endl
 << "Ulubione przedmioty: ";
 for( int i = 0; i < _doktorant.ulubionePrzedmiotyRozmiar; i++ ) {
 wy << _doktorant.ulubionePrzedmioty[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Stopien naukowy: " << _doktorant.stopien << std::endl
 << "Liczba publikacji: " << _doktorant.publikacje << std::endl
 << "Srednia: ";
 for( int i = 0; i < _doktorant.semestr; i++ ) {
 wy << _doktorant.srednia[ i ] << ", ";
 }
 wy << std::endl;
 wy << "Licznik obiektow: ";
 for( int i = 0; i < _doktorant.obiekty; i++ ) {
 wy << _doktorant.tablica[ i ] << std::endl;
 
 }
 
 return wy;
 }
 
 };
 
 
 
 int main() {
 
 int ksiazki, przedmioty;
 int wielkosc = 1;
 
 cout << "Podaj wielkosc tablicy na ksiazki: " << endl;
 cin >> ksiazki;
 
 
 
 
 
 
 cout << "\nPodaj wielkosc tablicy na przedmioty: " << endl;
 cin >> przedmioty;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Doktorant Doktorant( ksiazki, wielkosc, przedmioty );
 cin >> Doktorant;
 cout << Doktorant;
 
 
 
 
 
 
 
 cin.sync();
 cin.get();
 cin.sync();
 cin.get();
 return 0;
 }
 | 
|  | 
| carlosmay | » 2016-05-06 12:24:19 Najprawdopodobniej wskaźnik, za pośrednictwem którego chcesz coś zapisać nie jest ustawiony (pusty). | 
|  | 
| DejaVu | » 2016-05-06 12:35:54 Fatalnym pomysłem jest nazywać zmienne tak samo jak nazwy klas. | 
|  | 
| darko202 | » 2016-05-06 13:20:55 | 
|  | 
| DejaVu | » 2016-05-06 15:06:23 Dodam jeszcze: postaw breakpointa na początku programu i przesuwaj się nim po jednej linijce. Zawęzisz problem do jednej/dwóch problematycznych linijek. | 
|  | 
| pekfos | » 2016-05-07 16:01:04 | Czlowiek() {}
 Czlowiek( int wielkoscKsiazki, int rozmiarLicznik ) {
 licznik++;
 
 n = wielkoscKsiazki;
 ulubioneKsiazki = new std::string[ n ];
 
 obiekty = rozmiarLicznik;
 tablica = new int[ obiekty ];
 
 for( int i = 0; i < obiekty; i++ ) {
 tablica[ i ] = licznik;
 }
 
 }
 | 
 Jaki sens ma ten domyślny konstruktor? W ogóle nic nie robi, dopuszczenie do wywołania go to błąd programisty. | Doktorant( int rozmiarKsiazki, int rozmiarLicznik, int rozmiarPrzedmioty ): Stud2st( rozmiarKsiazki, rozmiarLicznik, rozmiarPrzedmioty )
 , Prowadzacy( rozmiarKsiazki, rozmiarLicznik )
 {
 }
 | 
 I tu wywołujesz domyślny konstruktor Czlowiek , więc ta część klasy Doktorant  nie jest zainicjalizowana. | 
|  | 
| « 1 » |