2

単一のグローバル配列を使用する必要がある静的メソッドを実装する次のクラスがあります。それはそのように定義されています:

//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」ポインタは各メソッドの異なるメモリ位置を指しているということです。なんで?そして、これを修正する方法は?

4

1 に答える 1

11

いいえ、それはグローバルではありません。に変更します

extern LOCK_ID __glob_lock_ids[LOCKID_COUNT];

移動します

LOCK_ID __glob_lock_ids[LOCKID_COUNT];

単一の実装ファイルに。あなたのバージョンstaticは、ヘッダーを含む各翻訳単位の新しい変数を効果的に作成します。

于 2012-12-06T08:03:23.010 に答える