【问题标题】:error LNK2001: unresolved external symbol "class"错误 LNK2001:未解析的外部符号“类”
【发布时间】:2014-07-31 09:56:58
【问题描述】:

我有一个包含“外部类定义”的头文件。这些头文件和类都在不同的 C++ 程序集中。现在在不同的 C++ 程序集中有一个类试图访问这个“extern”类函数,但有各种链接器错误,例如LNK2001: unresolved external symbol " class LMSystem LM"(?LM@@3VLMSystem@@A)LNK2019 等。

下面是代码 sn-p:for CPP 文件

/这个头文件包含外部引用/

#include "../lm/lm.h"



BOOL FDInitHW (void) 
{ 
   char pFileName[TALLY_MAX_PATH];

   ASSERT(0 != g_pFdbPath);
   strcpy(pFileName, g_pFdbPath);
   strcat(pFileName, FILENAME_HW_KB);

   return SUCCESS == LM.LMIOListReadSelective(pFileName, 
                           LMIO_READREPLACE, FDGetSelectListPtrArray()); 
}

Lm.h 的内容

class LMSystem
{
public:   
   LMSystem();
   ~LMSystem();

   // getting a specific list
   short  LMIOListReadSelective(char *fname, unsigned short readflags, LIST_SELECTOR* select_array[]);
}; 
    extern LMSystem LM;  // the library global LMSytem

那么你能帮我解决这个链接器错误吗? 我认为它必须与项目属性有关,因为在 VC++ 6.0 中开发的旧程序集运行良好,即使在我在 VS2012 中创建的这个 Win32 C++ 程序集中,我也可以去定义LMSystem使用 F12 或 Intellisense 的类,但理想情况下它应该指向 LM.H 头文件中的变量。 我看过很多帖子告诉如何在另一个 C++ .dll 中使用在不同 C++.dll 中定义的一种类型的函数。有许多项目级别的设置更改,但并不总是给我正确的结果。所以如果有人能给我一个解决这个问题的方法,那将是很大的帮助。

【问题讨论】:

  • LMSystem在哪里定义?
  • 您是否将此 LM 库链接到您的项目?顺便说一句,没有“C++ 程序集”之类的东西。
  • @Peter:LMSystem 类在 Lm.h 头文件中定义。请参考编辑后的代码 sn-p。 Marius:我的意思是 Win32 C++ dll

标签: visual-c++ visual-studio-2012 extern lnk2019 lnk2001


【解决方案1】:

LM 的实例需要在某处创建,并且您的链接器必须能够找到它。例如,将LMSystem LM; 添加到 一个 您的源 (.cpp) 文件

【讨论】:

  • 它已经在 .cpp 类中创建,因此 _declspec dllexport 问题已解决,但还有另一个外部链接错误。
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 2014-09-27
  • 2018-08-14
  • 2018-08-24
  • 2020-08-21
  • 2016-09-04
相关资源
最近更新 更多