在不同的静态方法中使用时,全局变量获得不同的值

时间:2012-12-06 08:01:20

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

我有以下类实现必须使用单个全局数组的静态方法。它定义如下:

//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'指针指向每种方法中的不同内存位置。为什么?以及如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

不,那不是全球性的。将其更改为

extern LOCK_ID __glob_lock_ids[LOCKID_COUNT];

并移动

LOCK_ID __glob_lock_ids[LOCKID_COUNT];

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