1

私は以下を含むクラスを持っています:

class SomeClass {
    SomeClass *previous;
    static __declspec(thread) SomeClass *stackTop;

public:
    SomeClass() : previous(stackTop) { stackTop = this; }
    ~SomeClass() { stackTop = previous; }
};

__declspec(thread) SomeClass *SomeClass::stackTop = NULL;

これはWin32ターゲットに対しては正常にコンパイルされますが、コンパイルがPocket PC 2003 (ARMV4)エラー C2485 で失敗する場合:

error C2485: '$I' : unrecognized extended attribute

コンストラクターとデストラクタでメンバーを設定する 2 つの場所SomeClassと、インスタンス化するすべての場所SomeClass(自動変数としてインスタンス化され、スタックの上位にある次のインスタンスがどこにあるかを知る必要があります)。

残念ながら、MSDN にはこのエラーに関する意味のあるドキュメントはなく、ドキュメントにはエラーが__declspec(thread)機能しない条件は示されていません。threadプリプロセッサで定義されていないことを確認しました。

4

1 に答える 1

0

__declspec(thread)Pocket PC (Windows CE) のバージョンが属性 (TLS)をサポートしているとは思えません。これは、Pocket PC 用にコンパイルし、Win32 用にコンパイルしていない場合にのみ発生する理由を説明します。次のリンクを参照してください。

于 2011-02-08T09:40:39.803 に答える