Problem z rzutowaniem i dziedziczeniem

0

Witam.
Na początek chcę przeprosić za tytuł postu, bowiem nie jest on zbyt wyszukany lecz nie mam pojęcia jak nazwać mój przypadek...
Pisząc pewien program napotkałem się na dość kłopotliwy problem. Niestety nie podzielę się kodem, bo przy takiej ilości raczej jest to bezsensowne.
Sytuacja wygląda mniej więcej tak:
Mam klasę np: "Model" która dziedziczy po klasach "DirectObject"; "TranslationObject" oraz "DrawElement"

Następnie robię mniej więcej coś takiego:

..
 std::vector<VOID *> pointers;
...
 pointers.puch_back((VOID*)(new Model));
...

Oprócz klasy "Model" jest/będzie wiele innych klas posiadających za jedną z klas bazowych klasę "TranslationObject". W wektorze "pointers" trzymam wszystkie możliwe obiekty.
Dodam jeszcze że klasa "TranslationObject" jest zbudowania mniej więcej tak:

vector3 Position;
vector3 Rotation;
vector3 Scale;

Gwóźdź programu pojawia się gdy chcę zrobić coś takiego:

...
((TranslationObject*)pointers[coś])->Rotation.x+=0.1f;
...

Zamiast obrót zmienia mi się pozycja obiektu.
A gdy dobieram się do pola "TranslationObject::Scale" ów obiekt zaczyna się obracać.
Nie wiecie co robię źle? (Chodzi mi o kod który pokazałem, bo raczej nie jesteście jasnowidzami i nie zgadniecie co mam w całym programie xD) Ewentualnie jaki mogłem popełnić błąd. A może źle rzutuję?

0

Tytuł jest dobry (nie potrzebne jest słowo "problem", bo wiadomo, że nowy wątek oznacza jakiś problem).

W zły sposób przechowujesz dane w tym wektorze. Na dodatek stosujesz dziedzicznie wielobazowe (jeśli dobrze zrozumiałem).
Jeśli chcesz dostać dobre rozwiązanie problemu musisz podaj trochę więcej szczegółów, bu nie było nieporozumień (najlepiej w postaci fragmentów kodu).

Na razie wygląda na to, że potrzebujesz coś takiego:

std::vector<TranslationObject *> pointers;
...
pointers.puch_back(new Model);

Wtedy cast'owanie jest zbędne, a sam przecież napisałeś: "Oprócz klasy "Model" jest/będzie wiele innych klas posiadających za jedną z klas bazowych klasę "TranslationObject"", więc powinno być to oczywiste.

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