【问题标题】:Global variable gets different values when used in different static methods全局变量在不同的静态方法中使用时得到不同的值
【发布时间】:2012-12-06 08:01:20
【问题描述】:

我有以下类实现必须使用 single 全局数组的静态方法。它是这样定义的:

//Defined in LockTrack.h file

enum LOCK_ID{
    LOCKID_0,
    LOCKID_1,
    LOCKID_2,

    LOCKID_COUNT
};

static LOCK_ID __glob_lock_ids[LOCKID_COUNT];


class CLockTrack
{
public:
    static void getLockedLocks(/*parameters*/)
    {
        //__glob_lock_ids = points to 0x015ef558 address in memory
        LOCK_ID lockID = __glob_lock_ids[0];
    }

    static void inline setLock(LOCK_ID lockID)
    {
        //__glob_lock_ids = points to 0x015ef330 address in memory
        __glob_lock_ids[lockID] = LOCK_ON_FLAG;
    }
};

但是发生的情况是,'__glob_lock_ids' 指针指向每个方法中的不同内存位置。为什么?以及如何解决这个问题?

【问题讨论】:

  • 真的在头文件中定义静态变量吗?你期望什么行为?

标签: c++ class global-variables static-methods static-members


【解决方案1】:

不,这不是全球性的。改成

extern LOCK_ID __glob_lock_ids[LOCKID_COUNT];

移动

LOCK_ID __glob_lock_ids[LOCKID_COUNT];

到单个实现文件中。您的版本static 将有效地为每个包含标题的翻译单元创建一个新变量。

【讨论】:

  • 都在一个 .h 文件中。我需要把它移到哪里?
  • @user843732 到一个实现文件(.cpp 文件)
  • 是的,我知道,但我没有 .cpp 文件。有什么办法可以在 .h 文件中做到这一点?
  • @user843732 您可以将其移动到任何实现文件。你肯定至少有一个。
  • @user843732 正在编译 cpp 文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2015-09-15
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多