0

Lua と Luabind から C++ へのプロジェクトに取り組んでいます。ここで、C++ にエクスポートするすべてのクラスで、静的メソッド Register を次のように記述します。

Button.h で:

static luabind::scope Register();

Button.cpp:

luabind::scope falcon::Button::Register()
{
    return 
        luabind::class_<Button, Button*>("Button")
        .def(luabind::constructor<float, float, float, float>());
}

すでに Lua にエクスポートしたすべてのクラスについて、これは正常に機能します。しかし、Button.cpp の場合、これはうまくいかないようです。

次のリンカ エラーが発生します。

1>luabindd.lib(luabindd.dll) : error LNK2005: "public: __thiscall luabind::detail::class_base::~class_base(void)" (??1class_base@detail@luabind@@QAE@XZ) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: __thiscall luabind::detail::function_object::function_object(int (__cdecl*)(struct lua_State *))" (??0function_object@detail@luabind@@QAE@P6AHPAUlua_State@@@Z@Z) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: virtual __thiscall luabind::detail::function_object::~function_object(void)" (??1function_object@detail@luabind@@UAE@XZ) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: __thiscall luabind::detail::invoke_context::operator bool(void)const " (??Binvoke_context@detail@luabind@@QBE_NXZ) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: __thiscall luabind::detail::invoke_context::invoke_context(void)" (??0invoke_context@detail@luabind@@QAE@XZ) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: void __thiscall luabind::detail::object_rep::set_instance(class luabind::detail::instance_holder *)" (?set_instance@object_rep@detail@luabind@@QAEXPAVinstance_holder@23@@Z) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: void * __thiscall luabind::detail::object_rep::allocate(unsigned int)" (?allocate@object_rep@detail@luabind@@QAEPAXI@Z) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: class luabind::detail::class_rep * __thiscall luabind::detail::object_rep::crep(void)" (?crep@object_rep@detail@luabind@@QAEPAVclass_rep@23@XZ) already defined in Button.obj
1>luabindd.lib(luabindd.dll) : error LNK2005: "public: class luabind::detail::cast_graph const & __thiscall luabind::detail::class_rep::casts(void)const " (?casts@class_rep@detail@luabind@@QBEABVcast_graph@23@XZ) already defined in Button.obj
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>D:\Users\THijs\Dropbox\3DAE\Platform Development\Falcon Engine\main\FalconEngine\Debug\FalconEngine.exe : fatal error LNK1169: one or more multiply defined symbols found

誰でもアイデアはありますか?

4

1 に答える 1

0

ヘッダーファイルで関数を定義して宣言することでエラーを解決しました...おそらく、Luaに登録したい他の10個のクラスではなく、このクラスに対してこれを行う必要がある理由を誰かが説明できるでしょう。 ?!

.cppの他のクラスに関数を実装しているので、ちょっと奇妙です...

于 2011-12-20T10:18:26.190 に答える