0

これが私が持っている簡単な問題を表す私の試みです:

Renderable* test1 = *(Renderable**) pointerToObject;
StaticObject* test2 = *(StaticObject**) pointerToObject;
test1->setTransparency(0.5f); // Crash here.
test2->setTransparency(0.75f); // Works here.

pointerToObjecttype はありますvoid*が、実際にはオブジェクトへのポインターを指しています(のようにRenderable**)。 Renderableは抽象クラスでStaticObjectあり、 を実装する子クラスですRenderabletest1->set()コンパイルすると、プログラムはメソッドでクラッシュしますが、 test2->set().

を知らなくても有効なtest1オブジェクトを取得することは可能ですか?pointerToObjectStaticObject

編集 これは私がこのポインタを保存する方法です:

StaticObject** udata = (StaticObject**) lua_newuserdata(state, sizeof(StaticObject*));
*udata = object;

objectへのポインタStaticObjectです。sizeof(StaticObject*)これがおそらく私の問題の原因であることに気づきました。methoddod のドキュメントは次のとおりですlua_newuserdata。メソッドを変更せずに私が望むものを達成する方法はまだありますlua_newuserdataか?

4

1 に答える 1

-1

renderableオブジェクトのタイプは何ですか? 一般に、ポインターを に変換する場合void*(これを行うためにキャストは必要ありません)、それを使用するには元の型 (キャストが必要です) に戻す必要があります。したがって、 の型が でrenderableある場合StaticObject、 の使用test1は無効です。

StaticObject renderable;
void *pointerToObject = &renderable;
Renderable* test1 = (Renderable*)pointerToObject;     // invalid pointer
StaticObject *test2 = (StaticObject*)pointerToObject; // okay
于 2013-11-05T13:51:15.760 に答える