0

この質問で発生したリンカー エラーを修正しましたが、別の問題が発生しています。lua を呼び出してオブジェクトをcreateObject()作成すると、boost::shared_ptr が新しいオブジェクトに作成され、リストに追加されて返されます。

mingw を使用する Windows では、lua で変更を行うと、変更が C++ オブジェクトに適用されません。Linuxで同じものを構築し、正常に機能したため、コードの問題になることはありません。

ObjectPtr createObject(PlayerPtr player){
    ObjectPtr obj(new Object(player));
    window->world.objects.push_back(obj);
    return obj;
}

bool setup(lua_State* luastate, Window* caller){
    open(luastate);

    // initialize some other classes here.

    class_<Player, PlayerPtr> Player("Player");
    Player.def_readwrite("playerColor", &Player::playerColor);
    Player.def_readwrite("displayName", &Player::displayName);

    class_<Object, ObjectPtr> Object("WorldObject");
    Object.def_readwrite("health", &Object::health);
    Object.def_readwrite("maxHealth", &Object::maxHealth);
    Object.def_readwrite("mesh", &Object::mesh);
    Object.def_readwrite("location", &Object::location);
    Object.property("player", &Object::getPlayer, &Object::setPlayer);
    Object.def("setOnDeath", &Object::setOnDeath);

    module(luastate)[
        vec3,
        color,
        Player,
        WorldObject,
        def("isWindowOpen", &isWindowOpen),
        def("loadMesh", &MeshManager::LoadMesh),
        def("createObject", &createObject),
        def("createPlayer", &createPlayer),
        ];

    window = caller;
}

ObjectPtrPlayerPtrは Object と Player の boost::shared_ptr でwindowあり、静的な Window ポインタであり、引数なしで の代わりに使用するのcreatePlayer()と同じです。createObject()PlayerObject

ルアで:

red = createPlayer()
red.playerColor = Color(255,0,0)
red.displayName = "Red"

obj = createObject(red)
obj.location = vec3(10,10,0)

print(obj.player.displayName)

コンソールに「赤」が表示されます。しかし、C++ では、値は単に "" です。

私はそれをデバッグし、オブジェクトが作成され、C++ でリストに追加されましたが、すべての変数がデフォルト状態にあるため、変更は行われませんでした。

luabind と mingw の問題か、単にビルドの問題だと思いますが、

デフォルトのビルド設定から変更したのは、コンパイルするために必要だった 2 つのことだけでした。jamfile で LUA_PATH を設定して、lua が入っているディレクトリを指すようにしました (環境変数から取得するのではなく)。私が変更され

#elif BOOST_PP_ITERATION_FLAGS() == 1

#else
#if BOOST_PP_ITERATION_FLAGS() == 1

(mingwは何らかの理由で好きではなかったので...(そして、はい、正しい場所に#endifを追加しました)

更新: msvc10 も使用してみましたが、まだ同じ問題があります。また、Linux にある同じバージョンのブーストに対してビルドしようとしました。しかし、役に立たない。

4

0 に答える 0