C ++从外部文件调用静态成员函数

时间:2011-06-05 10:39:39

标签: function static call external member

我在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有关并且搜索了它但我无法建立任何联系。请帮忙。

1 个答案:

答案 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。