Autor Wątek: Irrlicht, problem z metodą getPosition()  (Przeczytany 3321 razy)

Offline Pawel1503

  • Użytkownik
    • DevBlog Pawel1503

# Marzec 21, 2012, 16:59:51
Błąd jest na 85% spowodowany brakiem wiedzy na temat szablonów, ale nie mam teraz za bardzo chęci ani czasu żeby zgłębiać to zagadnienie. Dlatego proszę was o małą pomoc.

Otóż próbuję pobrać aktualną pozycję kamery:

core::stringw debugInfo;
debugInfo = mSceneManager->getActiveCamera()->getPosition().X; // X podkreślone na czerwono: #define X 70, expected a member name.

Natomiast w logu jest coś takiego:

Cytuj
game.cpp(77): error C2059: syntax error : 'constant'
game.cpp(78): error C2039: 'mDebugInfo' : is not a member of 'irr::core::vector3d<T>'
1>          with
1>          [
1>              T=irr::f32
1>          ]

Szukałem po googlu i po examplach z sdk. W jednym z przykładów znalazłem str.append(core::stringw(cam->getPosition().X)); które... również nie działa.

Czuje się jak ostatni lamer ale trudno :( Pozdrawiam !

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Adam7

  • Użytkownik
    • warsztat.gd

# Marzec 21, 2012, 17:10:45
Czyli takie coś nie działa?
core::stringw debugInfo= core::stringw(mSceneManager->getActiveCamera()->getPosition().X);

Offline Pawel1503

  • Użytkownik
    • DevBlog Pawel1503

# Marzec 21, 2012, 17:18:47
Nie działa, błąd ten sam co w pierwszym poście.

Offline karol57

  • Użytkownik

  • +1
# Marzec 21, 2012, 17:34:17
A jak dasz tak:
#undef X
debugInfo = mSceneManager->getActiveCamera()->getPosition().X;
#define X 70
??

Offline Pawel1503

  • Użytkownik
    • DevBlog Pawel1503

# Marzec 21, 2012, 17:39:08
Działa !

Dziękuje bardzo za pomoc :)

Offline karol57

  • Użytkownik

# Marzec 21, 2012, 17:45:15
Na przyszłość nie używaj definów do takich banałów jak X i Y jak już to SCREEN_X czy w tym stylu, bo potem są takie problemy, że kompilator zamienia ci punkt.pos.X na punkt.pos.70 i nie wiadomo skąd się errory biorą. A przy każdej zmianie pozycji pisać def i undef też jest bezsensowne, a co dopiero gdy musisz to zmienić.

Możesz użyć np. const'a + (jeżeli kompilator obsługuje i nie zależy ci specjalnie na przenośności) __declspec(selectany)
« Ostatnia zmiana: Marzec 21, 2012, 17:51:02 wysłana przez karol57 »

Offline Pawel1503

  • Użytkownik
    • DevBlog Pawel1503

# Marzec 21, 2012, 18:07:54
O kurde, dopiero teraz skumałem o co chodzi... w klasie Terrain zdefiniowałem X i Y, a potem się dziwiłem że nie działa :)

Dzięki Karol za naprowadzenie i rozwiązanie problemu :)

Offline agent_J

  • Użytkownik

# Marzec 21, 2012, 18:29:38
Na przyszłość nie używaj definów do takich banałów jak X i Y jak już to SCREEN_X czy w tym stylu, bo potem są takie problemy, że kompilator zamienia ci punkt.pos.X na punkt.pos.70 i nie wiadomo skąd się errory biorą. A przy każdej zmianie pozycji pisać def i undef też jest bezsensowne, a co dopiero gdy musisz to zmienić.

Możesz użyć np. const'a + (jeżeli kompilator obsługuje i nie zależy ci specjalnie na przenośności) __declspec(selectany)

Lepiej consta. Zastosowanie define nic nie daje poza potencjalnymi problemami przy kolizji nazw.