-2

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

以下是代码片段:用于 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 去定义类或智能感知,但理想情况下它应该指向我LM.H头文件中的变量。我已经看到很多帖子告诉如何在另一个 C++ .dll 中使用在不同 C++.dll 中定义的一种类型的函数。有许多项目级别的设置更改,但并不总是给我正确的结果。因此,如果有人可以为我提供解决此问题的方法,那将是很大的帮助。

4

1 回答 1

1

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

于 2014-08-01T10:45:07.193 回答