我有2个c ++项目(MFC) 一个是我在第二个(可执行的)中使用的库项目。
他们一起工作很棒,直到我从一个以CString作为参数的常规项目中调用一个函数。我得到像这样的链接器错误
error LNK2019: unresolved external symbol "public: void __thiscall
CTextDisplay::SetText1(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,
class ATL::ChTraitsCRT<wchar_t> > >)" (?SetText1@CTextDisplay@@QAEXV?$CStringT@_WV?
$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function
"public: void __thiscall CManualPane::SetBeadCountFor(int,double)"
(?SetBeadCountFor@CManualPane@@QAEXHN@Z) C:\source\IQ-Project\IQ\ManualPane.obj IQ
可执行项目的字符集设置为UNICODE,但Library将其设置为Multy-Byte chatacter set。如果没有出现大量错误,我真的无法改变它们。
有什么建议吗?
编辑:我们在这两个项目中有不同设置的原因是因为可执行项目基本上是我的组未构建或创建的外部项目。我们只需将它带入并使用它。图书馆项目是我们几年来一直在努力的事情。
答案 0 :(得分:3)
当您在可执行文件中包含库项目的标题时,可能会在函数声明中使用typedef。由于可执行文件使用UNICODE,因此声明现在位于UNICODE中。但是,库实现仍然在MultiByte中,因此定义与导致链接器错误的声明不匹配。
了解如何设置这些typedef,并且您可以围绕包含的标题执行一些特殊的#define,#undef。
答案 1 :(得分:1)
最后,在同一个解决方案中避免使用unicode和multybyte项目是一个更好的主意,所以我将它全部移动到unicode并从那里开始