Как мне решить LNK2005: уже определено - PullRequest
0 голосов
/ 19 декабря 2011

Я работаю над проектом с Lua и Luabind для C ++. Теперь в каждом классе, который я хочу экспортировать в C ++, я пишу статический метод Register следующим образом:

В Button.h:

static luabind::scope Register();

In 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

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 20 декабря 2011

Я только что решил ошибку, определив и объявив функцию в заголовочном файле ... Возможно, кто-нибудь может объяснить мне, почему это нужно сделать для этого класса, а не для, скажем, 10 других, которые я хочузарегистрироваться с Lua ?!

Это немного странно, потому что я реализую эту функцию в других классах в .cpp ...

...