Uczę się c++. Próbuję napisać coś z dziedziczeniem klas ale dostaję błąd którego znaczenia nie rozumiem - "main.cpp |11 & 12| error: 'Student' is an ambiguous base of 'Wynik'|". Myślałem żeby pokombinować z "virtual" ale to nie dało rezultatu. Proszę o pomoc.
main.cpp :
#include <iostream>
#include "zajecia.h"
using namespace std;
int main()
{
Wynik pierwszy;
Wynik * drugi = new Wynik;
pierwszy.Student::setterem(46627); // Tutaj wyskakuje błąd
drugi->Student::setterem(46628); // Tutaj wyskakuje błąd
pierwszy.Kolokwium::setterem(3.5, 4, 4);
drugi->Kolokwium::setterem(4.5,5,5);
pierwszy.Egzamin::setterem(3.5);
drugi->Egzamin::setterem(4);
pierwszy.Wynik::obliczWynik();
drugi->Wynik::obliczWynik();
pierwszy.wyswietlWynik();
drugi->wyswietlWynik();
delete drugi;
return 0;
}
zajecia.h :
#include <iostream>
class Student{
protected:
int nrindeksu;
public:
~Student(){}
void setterem(int indeks);
void wyswietlNrIndeksu();
};
class Kolokwium : public Student{ // Kiedy usunę dziedziczenie w tym miejscu to błąd znika ale nie chcę tego
protected: // robić - chcę wiedzieć dlaczego tak się dzieje lub jak rozwiązać ten problem w inny sposób
double wynikKol1;
double wynikKol2;
double wynikKol3;
public:
~Kolokwium(){}
void setterem(double K1, double K2, double K3);
void WyswietlWynikiKolokwium();
};
class Egzamin : public Student{
protected:
double wynik_egzaminu;
public:
~Egzamin(){}
void setterem(double egzamin);
void wyswietlWynikEgzaminu();
};
class Wynik : public Kolokwium, public Egzamin{
double wynikStudenta;
public:
~Wynik(){}
void obliczWynik();
void wyswietlWynik();
};
zajecia.cpp :
#include "zajecia.h"
using namespace std;
void Student::setterem(int indeks){
nrindeksu = indeks;
}
void Student::wyswietlNrIndeksu(){
std::cout << "nr indeksu: " << nrindeksu << std::endl;
}
void Kolokwium::setterem(double K1, double K2, double K3){
wynikKol1 = K1;
wynikKol2 = K2;
wynikKol3 = K3;
}
void Egzamin::setterem(double egzamin) {
wynik_egzaminu = egzamin;
}
void Egzamin::wyswietlWynikEgzaminu(){
std::cout << "Wynik z egzaminu: " << wynik_egzaminu << "pkt" << std::endl;
}
void Wynik::obliczWynik(){
wynikStudenta = (wynikKol1 + wynikKol2 + wynikKol3) / (3 + 3 * wynik_egzaminu);
}
void Wynik::wyswietlWynik(){
cout << "Wynik koncowy: " << wynikStudenta << endl;
}