链接项目,我使用其他项目的静态成员

发布于 2024-12-15 06:26:09 字数 837 浏览 0 评论 0原文

我在链接时遇到问题,我有两个项目编译为两个 dll ( A.dll B.dll )。在项目 A 中,我有静态 Singleton 单例。 伪代码: 项目 A 中的标头之一

ClassA
...
...
Singleton singleton;
...
...

在 cpp 文件中项目 B 的某个位置我有:

...
...
ClassA::singleton.SomeMethod();
...
...

项目编译,但链接存在问题。

我在 FreeCryEngine SDK 中遇到此问题 当我尝试在 GameDLL 项目中调用 CCryAction::GetCryAction() 时,会发生这种情况。 这不起作用:

int a = CCryAction::GetCryAction()->IsInLevelLoad();

错误 3 错误 LNK2001:无法解析的外部符号“私有:静态 类 CCryAction * CCryAction::m_pThis" (?m_pThis@CCryAction@@0PAV1@A) E:\CryENGINE_v3_3_5_2456_FreeSDK\Code\Game\GameDll\GameStateRecorder.obj GameDll

这个方法看起来怎么样?

static CCryAction * GetCryAction() { return m_pThis; }

I have problem with linking, I have two project which compliles to two dlls ( A.dll B.dll ). In project A, i have static Singleton singleton.
Psudocode :
One of headers in project A

ClassA
...
...
Singleton singleton;
...
...

In some place in project B in cpp file i have:

...
...
ClassA::singleton.SomeMethod();
...
...

Project compile, but there is a problem with linking.

I have this problem in FreeCryEngine SDK
This happen when I try to invoke CCryAction::GetCryAction() in GameDLL Project.
This don't work:

int a = CCryAction::GetCryAction()->IsInLevelLoad();

Error 3 error LNK2001: unresolved external symbol "private: static
class CCryAction * CCryAction::m_pThis"
(?m_pThis@CCryAction@@0PAV1@A) E:\CryENGINE_v3_3_5_2456_FreeSDK\Code\Game\GameDll\GameStateRecorder.obj GameDll

How this method look ?

static CCryAction * GetCryAction() { return m_pThis; }

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

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

发布评论

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

评论(1

谁人与我共长歌 2024-12-22 06:26:09

您需要: 在 cpp 文件的标头中

struct ClassA {
    static Singleton singleton;
};

// or  
extern Singleton g_singleton;

Singleton ClassA::singleton;

// or
Singleton g_singleton;

因此您可以在翻译单位中调用 ClassA::singleton.someMethod()::g_singleton.someMethod() 包括标题。请务必链接上面 cpp 的目标文件。

You need: in the header

struct ClassA {
    static Singleton singleton;
};

// or  
extern Singleton g_singleton;

In cpp file:

Singleton ClassA::singleton;

// or
Singleton g_singleton;

So you can call ClassA::singleton.someMethod() or ::g_singleton.someMethod() in translation units that include the header. Be sure to link the object file for the cpp above.

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