我在Global.h中定义了这个类
class Global
{
public:
static string InttoStr(int num);
};
在Global.cpp中,我有
Global::InttoStr(int num)
{
//Code To convert integer into string.
}
现在,从SubMove.cpp,当我调用Global :: InttoStr(num)时,我收到以下错误:
错误LNK2019:函数SubMove :: toString(void)中引用的未解析的外部符号Global :: InttoStr(int)
然后我将该函数设置为非静态函数,并将其调用为:
Global g;
g.InttoStr(num);
但错误仍然存在。
我认为它与extern有关并且搜索了它但我无法建立任何联系。请帮忙。
答案 0 :(得分:2)
首先,试试这个:
string Global::InttoStr(int num)
{
//Code To convert integer into string.
}
另外,您是从另一个库调用InttoStr吗?如果是这样,您将需要导出“全局”类。
最佳做法是使用lib标头(在下面的示例中,将LIB_替换为库的名称):
#ifndef SOME_LIB_HEADER
#define SOME_LIB_HEADER
#if defined (LIB_EXPORTS)
#define LIB_API __declspec(dllexport)
#else
#define LIB_API __declspec(dllimport)
#endif // SOME_LIB_HEADER
在包含Global的项目中定义LIB_EXPORTS,在Global.h中包含lib头,然后像这样定义类
class LIB_API Global
{
// some code for the class definition
};
每个项目都应该有自己的LIB_EXPORTS和LIB_API定义,如DLL1_EXPORTS,DLL1_API,DLL2_EXPORTS,DLL2_API等。
基本上这会使一个单独的lib使用__declspec(dllimport)处理前一个dll并解析所有的externs。