【问题标题】:C++ Calling Static member function from external fileC++从外部文件调用静态成员函数
【发布时间】:2011-06-05 10:39:38
【问题描述】:

我在 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:未解析的外部符号 Global::InttoStr(int) 在函数 SubMove::toString(void) 中引用

然后我将函数设为非静态并这样调用它:

      Global g;
      g.InttoStr(num);

但错误仍然存​​在。

我认为它与外部有关并进行了搜索,但我无法建立任何联系。请帮忙。

【问题讨论】:

  • 你能粘贴更多相关的代码吗?从您的描述中很难想象问题可能是什么。例如,"Global::InttoStr(int num) { ..." 看起来不应该编译。
  • 您在 Global.cpp 中的定义缺少返回值。这是代码的编写方式,还是只是问题中的拼写错误?
  • 如何编译? gcc SubMove.cpp?您需要包含两个 .cpp 文件。

标签: function static call external member


【解决方案1】:

首先,试试这个:

string Global::InttoStr(int num)
{
    //Code To convert integer into string.
}

另外,你是从另一个库调用 InttoStr 吗?如果是这样,您需要导出“Global”类。

最佳做法是使用 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 等。

基本上这使得一个单独的库用 __declspec(dllimport) 处理前一个 dll 并解析所有外部。

【讨论】:

  • 我只是追了一会儿这个错误,因为我有一个枚举作为返回类型,并一直认为我已经通过 cpp 文件中的方法正确声明了;如果您在返回类型中有“突出显示”的字符串,那会很有帮助:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多