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

发布于 2024-11-13 23:56:45 字数 587 浏览 4 评论 0原文

我在 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) 时,出现以下错误:

error LNK2019: 无法解析的外部符号 Global::InttoStr(int )在函数 SubMove::toString(void) 中引用

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

      Global g;
      g.InttoStr(num);

但错误仍然存​​在。

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

I have this class defined in Global.h

    class Global
    {
     public:
         static string InttoStr(int num);
    };

In Global.cpp, i have

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

Now, from SubMove.cpp, when i call Global::InttoStr(num) I get following error:

error LNK2019: unresolved external symbol Global::InttoStr(int) referenced in function SubMove::toString(void)

Then I made the function non-static and called it like so:

      Global g;
      g.InttoStr(num);

But the error still persists.

I thought it had something to do with extern and searched it but i could not make any connection. Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

﹉夏雨初晴づ 2024-11-20 23:56:45

首先,试试这个:

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 等。

基本上,这使得单独的 lib 使用 __declspec(dllimport) 处理先前的 dll 并解析所有外部函数。

First off, try this:

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

Also, are you calling InttoStr from another library ? If so, you'll need to export the class "Global".

Best practice is to use a lib header (in the example below replace LIB_ with the name of the library):

#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

Define LIB_EXPORTS in your project contianing Global, include the lib header in Global.h, then define the class like this

class LIB_API Global
{
    // some code for the class definition
};

Each project should have its own LIB_EXPORTS and LIB_API definition like DLL1_EXPORTS, DLL1_API, DLL2_EXPORTS, DLL2_API etc.

Basically this makes a separate lib treat the previous dll with __declspec(dllimport) and resolve all externs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文