Odwołyanie się za pomoca metody static.

0

Witam mam dość złożony problem z którym nie mogę sobie poradzić. Otóż mam pewną metodę statyczna (musi być ona statyczna jest to związane z pewnymi kwestiami) , w klasie w której znajduje się ta metoda jest obiekt w którym znajduje się metoda która chciałbym wywołać w mojej pierwszej metodzie. Jednak nie jest ona statyczna jak ta pierwsza. Owa metoda miała by modyfikować pewne zmienne w klasie co jeszcze utrudnia. Mimo prób i modyfikacji nie udało mi się znaleźć rozwiązania. Z tego co czytałem w metodach statycznych można wywoływać tylko statyczne. Ale wywala błędy. pomimo zmiany 2 metody na statyczna problem nadal jest bo modyfikuje w niej zmienne. A zmienne statyczne być nie mogę. Ma ktoś jakieś pomysły?

1

Metoda statyczna może wołać tylko metody statyczne DANEJ KLASY oraz DOWOLNE metody STATYCZNYCH PÓL tej klasy. Ale moim zdaniem twój problem to zły design. Napisz co chciałeś osiągnąć początkowo, bo na 99% robisz to po prostu źle. Praktycznie zawsze kiedy ktoś potrzebuje takiej karkołomnej konstrukcji oznacza to że źle podszedł do problemu.

0
class Foo
  {
    int val;
    void fooNonStatic() { val=0; }
    static void fooStatic(Foo &f) { f.fooNonStatic(); }
  };
0

Mój problem polega an tym że planuje stworzyć okno opengl z klasie. Jadnak są problemy z wywołaniem niektórych funkcji opengl w klasie np. glutDisplayFunc(display); http://paulsolt.com/2009/07/openglglut-classes-oop-and-problems/ (skąd wziąłem) Znalazłem stronę która pomogła mi umieścić wszystko w klasie i było ok. Dopóki przyszło do funkcji obsługującej klawiaturę. Przyjmuje ona pewne wartości których nie mogę zmienić Wiec nie wrzucę przez nią nic. W funkcji glutKeyboardFunc chciałem wywołać metodę z innej klasy która by mieniła zmienne z tej klasy które regulują rozmiar okna. Ale metody z klasie od opengl muszą być statyczne z tego co wyczytałem. Mógłbym zrobić to nieobiektowo jednak ja chce całkowicie zgodnie z c++.

Mam pewien pomysł jednak nie jestem w stanie go wykonać z uwagi na błąd. Otóż zamierzam w klasie podstawowej stworzyć statyczny wskaźnik (coś jak this ) i potem go wywoływać w statycznych metodach. Jednak mam problem z jego zdefiniowaniem. Podpowie ktoś co mogę robić zle?

1

Masz błąd w 36 linijce.

0

Mój problem polega an tym że planuje stworzyć okno opengl z klasie. Jadnak są problemy z wywołaniem niektórych funkcji opengl w klasie np. glutDisplayFunc(display)

glutDisplayFunc nie jest funkcją OpenGL; jest funkcją GLUT, biblioteki pomocniczej do OpenGL.

GLUT nie nadaje się do programowania obiektowego. Operuje na callbackach, którym nie ma jak podać dodatkowego stanu, a w programowaniu obiektowym potrzebny jest wskaźnik this.
Z tego powodu cały stan aplikacji musi być globalny. (funkcje i pola statyczne są globalne pod przykrywką)

Pogódź się z tym, bo kombinowaniem stworzysz niezrozumiały kod.
Albo znajdź coś innego niż GLUT.

1

Google: boost::bind

0

O poradziłem sobie z problemem i zrezygnowałem z obiektowości glut. Trudno. Mam jednak kolejny problem. Otóż chciałbym wykorzystywać mysz w mojej aplikacji. Intuicyjnie wykorzystuje funkcje glut która pobiera aktualne położenie myszy i sprawdza czy został naciśnięty przycisk. Położenie jest z tego co zauważyłem liczone jest w pikselach. Wywołuje to problem przy zmiennej rozdzielczości. Ma ktoś jakiś pomysł jak bez prowadzania na sztywno położeń do każdej opcji rozdzielczości szukać położenia danego "guzika" a właściwie tekstury guzika? Z góy thx za pomysły.

1 użytkowników online, w tym zalogowanych: 0, gości: 1