Cześć!
Chciałem przerobić mój projekt, który jeszcze nie wykorzystywał polimorfizmu ale napotkałem na problem: error: 'Object' is an ambiguous base of 'ranking' w 142 linijce kodu main.cpp, czyli w wsk=⊤
Kod maina
#include <iostream>
#include <cstdlib>
#include "Book.h"
#include <fstream>
#include <Windows.h>
using namespace std;
Object *wsk;
void baza_ksiazek();
int wlaczenie_funkcji(int opcja);
int pokaz_menu(short int opcja);
int rodzaj_aplikacji(int wybor);
void wykonaj(int wybor);
void ranking_ksiazek();
int main() { //Funckja glowna
int wybor;
wybor=rodzaj_aplikacji(wybor);
return 0;
}
int rodzaj_aplikacji(int wybor)/// Menu co chcesz robic
{
cout<<"Wybierz co chcesz robic: \n1.Baza ksiazek\n2.Ranking ksiazek\nTwoj wybor: ";
cin>>wybor;
wykonaj(wybor);
return wybor;
}
void wykonaj(int wybor)/// Funkcja pierwsza wykonujaca baza ksiazek/top ksiazki/opis
{
if(!wybor)
{
cout<<"\n\aOpcja nie poprawna!!! Koniec programu";
exit(0);
}
switch(wybor)
{
case 1:
{
baza_ksiazek();
break;
}
case 2:
{
ranking_ksiazek();
break;
}
default:
{
system("cls");
cout<<"\aOpcja nie poprawna"<<endl;
main();
}
}
}
void baza_ksiazek()/// Funkcja wywolujaca menu oraz rozpoczecie clasy Book /////////////////////////////////////////////1 Funkcja/////////////////////////////////////////////////////
{
short int opcja;
opcja=pokaz_menu(opcja);
wlaczenie_funkcji(opcja);
}
int pokaz_menu(short int opcja) // Funkcaj pokazujaca menu baza ksiazek
{
cout<<"Menu: "<<endl;
cout<<"1.Dodaj nowa ksiazka\n2.Wyswietl ksiazki\n3.Usun ksiazke\n4.Zamknij program\nWybrana opcja: ";
cin>>opcja;
return opcja;
}
void usuwaniemain(Object *wsk)
{
system("cls");
wsk->wyswietl();
wsk->usuwanie();
main();
}
void wyswietlmain(Object *wsk)
{
system("cls");
wsk->wyswietl();
cout<<endl<<endl;
main();
}
void koniecprogramu()
{
system("cls");
cout<<"Koniec programu";
exit(0);
}
int wlaczenie_funkcji(int opcja) // Funkcja wywolujaca polecenia bazy ksiazek
{
if(!opcja)
{
cout<<"\n\aOpcja nie poprawna";
exit(0);
}
Book ksiazka;
wsk = &ksiazka;
switch(opcja)
{
case 1: //Nowa ksiazka
{
wsk->wczytaj();
wsk->sprawdz();
wsk->zapisz();
wsk->wyswietl();
Sleep(3000);
system("cls");
main();
break;
}
case 2: //Wyswietl ksiazki
{
wyswietlmain(wsk);
break;
}
case 3: // Usuwanie ksiazki
{
usuwaniemain(wsk);
break;
}
case 4: // Koniec programu
{
koniecprogramu();
break;
}
default: // Wszystko inne
{
system("cls");
cout<<"\aOpcja nie poprawna"<<endl;
main();
}
}
}
void ranking_ksiazek()///////////////////////////////////////////////////////////////// 2 Funkcja ////////////////////////////////////////////////////////////////////////////////////////
{
int opcja;
cout<<"1.Stworz nowy ranking\n2.Pokaz ranking\n3.Koniec programu\n4.Usun wybrana pozycje ksiazki\nWybeirz opcje z podanych: ";
cin>>opcja;
ranking top;
wsk=⊤
switch(opcja)
{
case 1:
{
cout<<"Uwaga!! Podaj ranking w kolejnosci od 1-10\n";
for(int i=0; i<10;i++)
{
wsk->wczytaj();
wsk->sprawdz();
if(i==0)top.zapisz2();
else wsk->zapisz();
}
wsk->wyswietl();
Sleep(3000);
main();
break;
}
case 2:
{
wyswietlmain(wsk);
break;
}
case 3:
{
koniecprogramu();
break;
}
case 4:
{
usuwaniemain(wsk);
break;
}
default:
{
system("cls");
cout<<"\aOpcja nie poprawna"<<endl;
main();
}
}
}
Kod pliku nagłówkowego:
#include <iostream>
using namespace std;
class Object//// kalsa abstrakcyjna
{
public:
virtual wczytaj();
virtual wyswietl();
virtual zapisz();
virtual sprawdz();
virtual usuwanie();
};
class Book :public Object//Pierwsza klasa do bazy ksiazek
{
string tytul;
string autor;
int ilosc_stron;
int jaka;
bool decyzja;
public:
Book(string="nic", string="nic", int=0, int=0, bool=true);
virtual wczytaj();
virtual wyswietl();
virtual zapisz();
virtual sprawdz();
virtual usuwanie();
wyszukaj();
//friend class ranking;
};
// druga klasa do rankingu ksiazek
class ranking: public Object, public Book
{
int nr_pozycji;
public:
ranking(int=0);
virtual wczytaj();
virtual wyswietl();
virtual sprawdz();
virtual zapisz();
virtual usuwanie();
zapisz2();
};
Kod do Book.cpp z kodem klas
#include <iostream>
#include <string>
#include <cstdlib>
#include "Book.h"
#include <fstream>
#include <Windows.h>
#include <conio.h>
using namespace std;
// Pierwsza klasa //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Book::Book(string t, string a, int i, int j, bool d)
{
tytul=t;
autor=a;
ilosc_stron=i;
jaka=j;
decyzja=d;
}
Book::wyswietl()
{
fstream plik;
if(decyzja==true)plik.open("Ksiazki.csv", ios::in);
if(decyzja==false)plik.open("ranking.csv", ios::in);
string linia;
string col1 = "";
string col2 = "";
string col3 = "";
string col4 = "";
string col5="";
int dl;
int i;
char znak;
int col_poz;
while(getline(plik, linia))
{
if(linia=="")
{
continue;
}
else
{
dl=linia.size();
for(int i=0;i<=dl;i++)
{
znak = linia[i]; ///przypisujemy aktualny znak
if (znak==';') col_poz++; //sprawdzamy jesli zobaczy ; przejdzie do kolejnego wyrazu
switch (col_poz){
case 0:
{
if (znak!=';') col1 = col1 + linia[i]; //nie pszeszlo do kolejnego wyrazu wiec do col1 przypisuje po koleji kolejne litery za napotka znak
break;
}
case 1:
{
if (znak!=';') col2 = col2 + linia[i]; // napotkalo po raz pierwszy znak wiec wypisuje kolejny wyraz do kolejne zmiennej
break;
}
case 2:
{
if (znak!=';') col3 = col3 + linia[i];
break;
}
case 3:
{
if (znak!=';') col4 = col4 + linia[i];
break;
}
case 4:
{
if(znak!=';'&&decyzja==false) col5= col5+linia[i];
break;
}
}
}
cout<<"Tytul : "<<col2<<endl;
cout<<"Autor : "<<col3<<endl;
cout<<"Ilosc stron: "<<col4<<endl;
if (col1=="1") cout<<"Ksiazka przeczytana"<<endl;
else cout<<"Ksiazka do przeczytania !!"<<endl;
if(decyzja==false)cout<<"Nr_Pozycji: "<<col5<<endl;
col_poz =0;
col1 = "";
col2 = "";
col3 = "";
col4 = "";
if(decyzja==false)col5="";
linia="";
}
}
plik.close();
}
Book::wczytaj()
{
string jaka2;
cout<<"Podaj parametry: ";
getline(cin, autor);
cout<<endl<<"Tytul ksiazki: ";
getline(cin, tytul);
cout<<"Autor ksiazki: ";
getline(cin, autor);
cout<<"Ilosc stron: ";
cin>>ilosc_stron;
cout<<"Tak - Ksiazka przeczytana\nNie - Ksiazka do przeczytania\nPodaj typ ksiazki: ";
cin>>jaka2;
if(tytul.find(';')||autor.find(';'))
{
cout<<"Znak "<<char(241)<<";"<<char(241)<<" jest zakazany";
Book::wczytaj();
}
int dl;
dl=jaka2.size();
for(int i=0;i<=dl;i++)
{
if(int(jaka2[i])<=90)
{
jaka2[i]=int(jaka2[i])+32;
}
}
if(jaka2!="tak"&&jaka2!="nie")
{
cout<<"\aMiales podac tak lub nie !!!\n";
Book::wczytaj();
}
if(jaka2=="tak")
{
jaka=1;
}
else if(jaka2=="nie")
{
jaka=0;
}
else
{
cout<<"\aOpcja nie poprawna!!!"<<endl;
Book::wczytaj();
Book::sprawdz();
Book::zapisz();
}
}
Book::zapisz()
{
fstream plik;
plik.open("Ksiazki.csv", ios::out | ios::app);
plik<<jaka<<';'<<tytul<<';'<<autor<<';'<<ilosc_stron<<endl;
plik.close();
}
Book::sprawdz()
{
if(ilosc_stron<0)
{
system("cls");
cout<<"\aIlosc stron nie moze byc ujemna\n\n";
Book::wyswietl();
Book::wczytaj();
Book::sprawdz();
Book::zapisz();
}
if(!ilosc_stron)
{
ilosc_stron=0;
cout<<"\aPodana ilosc stron nie jest liczba\n";
exit(0);
}
int tytul_d, autor_d;
tytul_d=tytul.size();
autor_d=autor.size();
if(tytul_d>150||autor_d>150)
{
system("cls");
cout<<"\aAutor lub Tytul jest zadlugi limit znakow to 150\n\n";
Book::wyswietl();
Book::wczytaj();
Book::sprawdz();
Book::zapisz();
}
}
Book::usuwanie()
{
int numer;
cout<<"Podaj numer ksiazki ktora chcesz usunac ";
cin>>numer;
numer--;
if(numer<0)usuwanie();
fstream plik;
if(decyzja==true)plik.open("Ksiazki.csv", ios::in);
if(decyzja==false)plik.open("ranking.csv", ios::in);
string linia[1000];
int i=0;
while(getline(plik, linia[i]))
{
if(linia[i]=="")continue;
else i++;
}
plik.close();
if(decyzja==false)Book::wczytaj();
fstream plik2;
if(decyzja==true)plik2.open("Ksiazki.csv", ios::out);
if(decyzja==false)plik2.open("ranking.csv", ios::out);
for(int j=0;j<=i;j++)
{
if(j==numer)
{
cout<<"\nKsizak usunieta!!";
if(decyzja==false)
{
plik2<<jaka<<';'<<tytul<<';'<<autor<<';'<<ilosc_stron<<';'<<++numer<<endl;
j++;
}
}
else plik2<<linia[j]<<endl;
}
plik2.close();
}
Book::wyszukaj() ////Niegotowe//////
{
string podane;
cout<<"Wpisz tytul ksiazki lub autora, aby wyszukac: ";
cin>>podane;
fstream plik;
plik.open("Ksiazki.csv", ios::in);
string line;
while(getline(plik, line))
{
if(line.find(podane))
{
if(line.find('0'))cout<<"Ksiazka do przeczytania!!\n";
else if(line.find('1') ) cout<<"Ksiazka przeczytana";
cout<<line<<endl;
}
}
getch();
plik.close();
}
/// Druga klasa ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ranking::ranking(int nr)
{
nr_pozycji=nr;
}
ranking::wczytaj()
{
decyzja=false;
Book::wczytaj();
cout<<"Podaj numer ksiazki w ranking: ";
cin>>nr_pozycji;
}
ranking::sprawdz()
{
decyzja=false;
Book::sprawdz();
if(nr_pozycji<1||nr_pozycji>10)
{
void ranking_ksiazek();
}
}
ranking::zapisz()
{
fstream plik;
plik.open("ranking.csv", ios::out|ios::app);
plik<<jaka<<';'<<tytul<<';'<<autor<<';'<<ilosc_stron<<';'<<nr_pozycji<<endl;
plik.close();
}
ranking::zapisz2()
{
fstream plik;
plik.open("ranking.csv", ios::out);
plik<<jaka<<';'<<tytul<<';'<<autor<<';'<<ilosc_stron<<';'<<nr_pozycji<<endl;
plik.close();
}
ranking::wyswietl()
{
system("cls");
decyzja=false;
Book::wyswietl();
}
ranking::usuwanie()
{
decyzja=false;
Book::usuwanie();
}
Przepraszam jak coś źle lub za mało podałem.
Proszę o pomoc!!!