错误LNK2001:未解析的外部符号“class”

时间:2014-07-31 09:56:58

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

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

以下是代码段:对于CPP文件

/ 此头文件包含extern引用 /

#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 ++程序集中,我能够定义使用F12或Intellisense的LMSystem类,但理想情况下它应该指向LM.H头文件中的变量。 我已经看到很多帖子讲述了如何使用不同C ++中定义的一种类型的函数.dll在另一个C ++ .dll中。有许多项目级别的设置更改,但它并不总能给我正确的结果。所以,如果有人能给我一个解决这个问题的方法,那么这将是很有帮助的。

1 个答案:

答案 0 :(得分:1)

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