Witam, uczę się programować na podstawie "Od zera...", doszedłem do końca działu 1., rzuciłem okiem na dział drugi, ale przecież tylko czytając się nic nie nauczę :)
Żeby ogarnąć klasy i obiekty, a przynajmniej ich podstawy, po kilku prostych programach postanowiłem zrobić troszkę większy (jak na ten poziom nauki) program, "gra wyścigi", wsio w konsoli oczywiście, więc są to dość symboliczne wyścigi :)
Mam klasę bazową "samochód" oraz klasy pochodne, jako konkretne modele aut z konkretnymi danymi.
Gracz ma na początku wybrać jaki chce model samochodu i na podstawie tego wyboru program powinien stworzyć odpowiedni obiekt odpowiedniej klasy. Potem, po wyborze ilosci przeciwników gra wylosuje modele dla każdego z nich, ale na razie stanąłem na tworzeniu obiektu dla gracza.
#include <iostream>
#include "funkcje.h"
#include "pojazdy.h"
#define O std::cout
#define I std::cin.clear();std::cin.sync();std::cin
#define E std::endl
int main(void)
{
O<<"Podaj nazwe gracza: ";
gracz Player_1;
I>>Player_1.nazwa_gracza;
O<<"\nWitaj "<<Player_1.nazwa_gracza<<"!"<<E;
O<<"\nWybierz samochod.\n";
// Wypisanie mozliwych do wyboru aut.
I>>Player_1.numer_samochodu;
while (Player_1.numer_samochodu<1 || Player_1.numer_samochodu>12 || std::cin.good()==0 || std::cin.fail()==1)
{
O<<"Nie ma takiej opcji!\n";
O<<"Wybierz samochod."<<E;
I>>Player_1.numer_samochodu;
}
samochod* Player_1_auto = Stworz_auto_gracza(Player_1.numer_samochodu);
return 0;
}
fragment dolaczonego pliku:
samochod* Stworz_auto_gracza(int wybor_auta)
{
switch (wybor_auta)
{
case 1: return (new Audi_TT);
case 2: return (new Porsche_911);
case 3: return (new Mazda_MX5);
case 4: return (new Polonez);
case 5: return (new Fiat_126);
case 6: return (new Garbus);
case 7: return (new Tico);
case 8: return (new Porsche_Cayenne);
case 9: return (new Audi_DD);
case 10: return (new Traktor);
case 11: return (new Statek_Kosmiczny);
case 12: return (new Samojazd);
default: return NULL;
}
}
Nie bijcie za te makra na początku, chyba, że za endl, muszę jeszcze ogarnąć kiedy się go używa, ale nie o tym temat.
Gdybym od razu w switchu tworzył obiekty bez użycia [i][color=blue]new[/color][/i], to poza switchem program ich nie widzi, co raczej zrozumiałe, więc znalazłem gdzieś informację żeby użyć takiej metody.
Po 22 linijce w [i]main[/i] rzutowalbym dynamic_cast'em na odpowiedni typ. Problem w tym, że w zaleznosci od modelu trzeba rzutowac na inny typ.
Jak więc powinienem, na podstawie wyboru gracza (lub drogą losowania) stworzyć odpowiedni obiekt odpowiedniej klasy, żebym mógł go używać? Albo co robię źle?
C::B wyrzuca mi takie błędy (dotyczą one tego fragmentu dołączonego pliku):
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp||In function 'samochod* Stworz_auto_gracza(int)':|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|19|error: 'samochod' is an inaccessible base of 'Audi_TT'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|20|error: 'samochod' is an inaccessible base of 'Porsche_911'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|21|error: 'samochod' is an inaccessible base of 'Mazda_MX5'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|22|error: 'samochod' is an inaccessible base of 'Polonez'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|23|error: 'samochod' is an inaccessible base of 'Fiat_126'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|24|error: 'samochod' is an inaccessible base of 'Garbus'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|25|error: 'samochod' is an inaccessible base of 'Tico'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|26|error: 'samochod' is an inaccessible base of 'Porsche_Cayenne'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|27|error: 'samochod' is an inaccessible base of 'Audi_DD'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|28|error: 'samochod' is an inaccessible base of 'Traktor'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|29|error: 'samochod' is an inaccessible base of 'Statek_Kosmiczny'|
D:\Studia\C++\Projekty\Super Wyscigi\pojazdy.cpp|30|error: 'samochod' is an inaccessible base of 'Samojazd'|
||=== Build finished: 12 errors, 0 warnings ===|
Po wywaleniu z maina 22. linijki (zaczynającej sie od samochod*), a z dołączonego pliku funkcji samochod* Stworz_auto_gracza(int wybor_auta) (oraz jej deklaracji z odpowiedniego nagłówka) wsio działa jak powinno, no ale nie mam tworzenia auta gracza.
W załączniku wrzucam cały projekt. Proszę o pomoc w znalezieniu rozwiązania.