Ĺadny brzuch
Witam.
Piszę program dla urządzenia "PSP", który jest oparty na silniku graficznym.
Otóż nie jestem zbyt doświadczonym programistą i mam problemy w programowaniu obiektowym.
Chcę stworzyć obiekty, które będą zawierały kod rysowania poszczególnych obrazów, jednak gdy zamieszczę sam kod rysowania, komplikator domaga się deklaracji głównej struktury graficznej, której nie mogę powtarzać w każdym obiekcie (gdy tak zrobię, po uruchomieniu program szaleje). Niestety nie mam pojęcia jak zrobić tak, aby każdy obiekt "wiedział" o jednorazowej deklaracji całej tej struktury. Wie ktoś jak zrobić to?
Deklaracja, która musi zostać wykonana tylko raz:
engineDevice *device = createDevice(); video::IVideoDriver* driver = device->getVideoDriver();
"device" jest właśnie tym elementem, który musi być zadeklarowany tylko raz.
Przykładowe rysowanie obrazu:
driver->draw2DImage(tlo, core::position2d<s32>(rozX,rozY), core::rect<s32>(rozX,rozY,roz2X,roz2Y), 0, video::SColor(255,255,255,255), true);
Użytkownik Macik edytował ten post 17 listopad 2006, 17:34
...
Singleton. Użyj statycznego pola w klasie do przechowywania instancji i statycznego metody pobierającej instancje (lub tworzącej jej jeśli jeszcze nie istnieje).
Kodie możesz dać przykład jak to zrobić? Niezbyt rozumiem.
class moja { static bool czy_jest_juz; };
Ta zmienna jest tworzona nie dla pojedyńczych obiektów, ale całej klasy.
P.S
Musisz ją w programie gdzieś zadeklarować np. tak moja::czy_jest_juz = false;
No i jeszcze można załadować strukturę z pliku (zależy jak szybko ta operacja ma być powtarzana, ale jak tylko na samym początku programu to taki plik=config jak najbardziej może być).
KlyYmek zrobiłem tak jak mówisz i:
http://img75.imageshack.us/img75/2769/logpd5.th.jpg
otrzymałem taki log...
KlyYmek zrobiłem tak jak mówisz i:
http://img75.imageshack.us/img75/2769/logpd5.th.jpg
otrzymałem taki log...
Ten błąd nie jest związany ze statycznym składnikiem. Mi wygląda to na to, że do zwykłego składnika odwołujesz się tak jak do tego który jest pokazywany wskaźnikiem czyli -> a do zwykłych obiektów odnosi się kropką .
moj obiekt; moj *wsk_na_obiekt; obiekt.funkcja(); obiekt.skaldowa = 20; wsk_na_obiekt = new moj; wsk_na_obiekt->funkcja(); wsk_na_obiekt->skladowa = 20;
Oczywiście w tym momencie nie jest ważna sama treść klasy :)
Więc do deklaracji statycznego składnika mam dodać "*"?
Gdy tak zrobię, log się zmienia na:
" request for member 'getVideoDriver' in 'Intro::device', which is of non-class type 'bool' "
Więc do deklaracji statycznego składnika mam dodać "*"?
Gdy tak zrobię, log się zmienia na:
" request for member 'getVideoDriver' in 'Intro::device', which is of non-class type 'bool' "
Nie! Do składnika statycznego odwołujesz się tak jak do zwykłego, ale można się odnieść też po prostu do samej klasy np. klasa::statyczny.
Co do mojego wcześniejszego postu to odnosił się do Twojego poprzeniego loga. Z resztą na samym początku napisałem, że to już nie błąd związany ze składnikem statycznym, tylko z odwoływaniem się do obiektów.
Poczytaj jeszcze trochę o C++ :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Piszę program dla urządzenia "PSP", który jest oparty na silniku graficznym.
Otóż nie jestem zbyt doświadczonym programistą i mam problemy w programowaniu obiektowym.
Chcę stworzyć obiekty, które będą zawierały kod rysowania poszczególnych obrazów, jednak gdy zamieszczę sam kod rysowania, komplikator domaga się deklaracji głównej struktury graficznej, której nie mogę powtarzać w każdym obiekcie (gdy tak zrobię, po uruchomieniu program szaleje). Niestety nie mam pojęcia jak zrobić tak, aby każdy obiekt "wiedział" o jednorazowej deklaracji całej tej struktury. Wie ktoś jak zrobić to?
Deklaracja, która musi zostać wykonana tylko raz:
engineDevice *device = createDevice(); video::IVideoDriver* driver = device->getVideoDriver();
"device" jest właśnie tym elementem, który musi być zadeklarowany tylko raz.
Przykładowe rysowanie obrazu:
driver->draw2DImage(tlo, core::position2d<s32>(rozX,rozY), core::rect<s32>(rozX,rozY,roz2X,roz2Y), 0, video::SColor(255,255,255,255), true);
Użytkownik Macik edytował ten post 17 listopad 2006, 17:34
...
Singleton. Użyj statycznego pola w klasie do przechowywania instancji i statycznego metody pobierającej instancje (lub tworzącej jej jeśli jeszcze nie istnieje).
Kodie możesz dać przykład jak to zrobić? Niezbyt rozumiem.
class moja { static bool czy_jest_juz; };
Ta zmienna jest tworzona nie dla pojedyńczych obiektów, ale całej klasy.
P.S
Musisz ją w programie gdzieś zadeklarować np. tak moja::czy_jest_juz = false;
No i jeszcze można załadować strukturę z pliku (zależy jak szybko ta operacja ma być powtarzana, ale jak tylko na samym początku programu to taki plik=config jak najbardziej może być).
KlyYmek zrobiłem tak jak mówisz i:
http://img75.imageshack.us/img75/2769/logpd5.th.jpg
otrzymałem taki log...
KlyYmek zrobiłem tak jak mówisz i:
http://img75.imageshack.us/img75/2769/logpd5.th.jpg
otrzymałem taki log...
Ten błąd nie jest związany ze statycznym składnikiem. Mi wygląda to na to, że do zwykłego składnika odwołujesz się tak jak do tego który jest pokazywany wskaźnikiem czyli -> a do zwykłych obiektów odnosi się kropką .
moj obiekt; moj *wsk_na_obiekt; obiekt.funkcja(); obiekt.skaldowa = 20; wsk_na_obiekt = new moj; wsk_na_obiekt->funkcja(); wsk_na_obiekt->skladowa = 20;
Oczywiście w tym momencie nie jest ważna sama treść klasy :)
Więc do deklaracji statycznego składnika mam dodać "*"?
Gdy tak zrobię, log się zmienia na:
" request for member 'getVideoDriver' in 'Intro::device', which is of non-class type 'bool' "
Więc do deklaracji statycznego składnika mam dodać "*"?
Gdy tak zrobię, log się zmienia na:
" request for member 'getVideoDriver' in 'Intro::device', which is of non-class type 'bool' "
Nie! Do składnika statycznego odwołujesz się tak jak do zwykłego, ale można się odnieść też po prostu do samej klasy np. klasa::statyczny.
Co do mojego wcześniejszego postu to odnosił się do Twojego poprzeniego loga. Z resztą na samym początku napisałem, że to już nie błąd związany ze składnikem statycznym, tylko z odwoływaniem się do obiektów.
Poczytaj jeszcze trochę o C++ :)