我的头文件有一个" extern类定义"在里面。这两个头文件和类都在不同的C ++程序集中。现在有一个不同的C ++程序集中的类正试图访问这个" extern"类函数但存在各种链接器错误,例如LNK2001: unresolved external symbol " class LMSystem LM"(?LM@@3VLMSystem@@A)
,LNK2019
等。
/ 此头文件包含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());
}
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中。有许多项目级别的设置更改,但它并不总能给我正确的结果。所以,如果有人能给我一个解决这个问题的方法,那么这将是很有帮助的。
答案 0 :(得分:1)
需要在某处创建LM
的实例,并且链接器必须能够找到它。例如,将LMSystem LM;
添加到一个源(.cpp
)文件