C++ – How to fix error LNK2001 & LNK2019

boostc

ProjectAAA.obj : error LNK2001: unresolved external symbol "public: __thiscall X::ClassEvent::ClassEvent(unsigned int)" (??0ClassEvent@X@@QAE@I@Z)

boost::shared_ptr<ClassEvent> bcfEvent(new ClassEvent((unsigned int) 10));

I have defined ClassEvent::ClassEvent(unsigned int) and have no idea how to fix this LINK errors.

Any suggestion is appreciated.

Thank you

MORE INFO:

1>ProjectAAA.obj : error LNK2019: unresolved external symbol "public: __thiscall APP::X::ClassEvent::ClassEvent(unsigned int)" (??0ClassEvent@X@APP@@QAE@I@Z) referenced in function "private: class std::vector,class std::allocator > > __thiscall APP::X::ProjectAAA::GenerateEvents(class std::map > > const &)" (?GenerateEvents@ProjectAAA@X@APP@@AAE?AV?$vector@V?$shared_ptr@VClassEvent@X@APP@@@boost@@V?$allocator@V?$shared_ptr@VClassEvent@X@APP@@@boost@@@std@@@std@@ABV?$map@VDate@APP@@IUEventAttributesMapCompare@ProjectAAA@X@2@V?$allocator@U?$pair@$$CBVDate@APP@@I@std@@@std@@@5@@Z)

Now I have completely isolated the error:

1>ProjectAAA.obj : error LNK2019: unresolved external symbol "public: __thiscall APP::X::ClassEvent::ClassEvent(unsigned int)" (??0ClassEvent@X@APP@@QAE@I@Z) referenced in function "private: void __thiscall APP::X::ProjectAAA::TestGenerateEvents(void)" (?TestGenerateEvents@ProjectAAA@X@APP@@AAEXXZ)

Best Answer

Your problem is having two ClassEvent.cpp files in your solution. When VC++ compiles your solution, it outputs all obj files in one directory and thus generates two ClassEvent.obj files. Whichever cpp is compiled later overwrites the former. This causes symbols from the first one being lost and invisible to the linker.

You can fix this issues by opening properties of one of the files, choosing C/C++ -> Output Files -> Object File Name and changing it to some non-colliding value (such as ClassEvent2.obj).

I believe this is a bug in Visual Studio but it hasn't been addressed in last 4 versions and is therefore likely to stay.

Related Topic