0

我有一个错误 LNK2019:未解决的外部符号问题。

我有 2 个文件,我将它们移动到共享位置,以便 2 个不同的项目可以使用类。那里还有其他类似的课程。

问题是,当我从我得到的一个项目的主要部分调用课程时

error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::~CProcessCommandLine(void)" (??1CProcessCommandLine@@QAE@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: bool __thiscall CProcessCommandLine::Wait(void)const " (?Wait@CProcessCommandLine@@QBE_NXZ) referenced in function _main
error LNK2019: unresolved external symbol "public: class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const & __thiscall CProcessCommandLine::getTargetNamesVect(void)" (?getTargetNamesVect@CProcessCommandLine@@QAEABV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::CProcessCommandLine(void)" (??0CProcessCommandLine@@QAE@XZ) referenced in function _main

当我打开头文件并右键单击其中一个函数并转到定义时,它不会转到 .cpp 中的定义。当我右键单击 .cpp 中的函数并说转到定义时,它会显示“符号未定义”。

有谁知道为什么会发生这种情况?.h 和 .cpp 都在同一个位置,并且该位置在项目的附加包含目录中

编辑:

此文件夹中的其他文件中存在以下代码:

#ifdef PROJ1
#include "class1.h"
#elif PROJ2
#include "class2.h"
#endif

我以前从未见过这些东西。它们在代码中使用,但仅根据使用的项目包含正确的标头。以上位于此文件夹中其他类的 .cpp 中。所以我把它放在这里。但在其他类中,它不属于的项目是灰色的。当我将它放入 .h 时,它会使正确的标题变灰。但是由于某种原因,这个 .cpp 没有被识别为项目的一部分。

4

1 回答 1

0

如果您的函数属于与您正在构建的模块不同的模块,则必须导出类:

#ifdef THIRD_MODULE
#define DLLIMPEXP _declspec(dllexport)
#else
#define DLLIMPEXP _declspec(dllimport)
#endif

class DLLIMPEXP CProcessCommandLine
{
   //...
};

您使用已定义来构建定义此类的项目THIRD_MODULE

该项目将生成.lib文件,您必须将其添加到主项目的链接器设置中的其他依赖项中。

于 2012-04-17T12:37:14.460 回答