1

クラス定義中の構造体の初期化に問題があります。C++ 標準では、変数以外のクラス定義中に変数を定義できないことを知っていstatic constます。

私の場合、多くの構造体を初期化して C コードを生成しました。このコード (純粋な C コード) のすべての POD 変数はグローバルです。このPODをローカルにしたいので、このコードをクラスに含めようとしており、構造体の初期化の問題を解決する必要があります。生成された構造体の基本的な例は次のとおりです。

// generated C-code
struct G { int a; };
G GS = {0};

それをクラスに入れようとすると、次のように言えます。

class CL{
public:
    struct G { int a; } GS = {0}; //error
};

そして、エラーがあります:

error C2059: syntax error : '{'
error C2334: unexpected token(s) preceding '{'; skipping apparent function body

Ok。いくつかの変更。

class CL{
public:
    struct G { int a; } GS;
    CL() { GS.a = 0; }
};

正常に動作します。しかし、私の場合、多くのフィールドを含む多くの構造があります。生成されたコードに多くの変更を加えたくありません。どうstatic constですか?

class CL{
public:
    static const struct G { int a; } GS; //ok
    static const struct GT { int a; } GST = {0}; //error
};

たぶん、すべての構造体をstatic const構造体にして初期化できますか? どうすれば問題を解決できますか?

4

3 に答える 3

0

たぶん、この解決策はあなたに受け入れられるでしょう

// your header
template<typename T> T Create();

#define DECLARE_CREATE(STRUCT_TYPE, INITIALIZER)\
    template<> STRUCT_TYPE Create<STRUCT_TYPE>()\
{\
    STRUCT_TYPE GS = INITIALIZER;\
    return GS;\
}\

// generated C-code
struct G { int a; };
// replace G GS = {0};
DECLARE_CREATE(G, {0});


int _tmain(int argc, _TCHAR* argv[])
{
    G g = Create<G>(); // use initialized structure
    return 0;
}
于 2012-10-30T09:44:50.390 に答える
0

静的メンバー構造体の初期化を .cpp ファイルに入れることができます。次に例を示します。

// cl.h
class CL{
public:
  static const struct G { int a; } GS; 
  };

// cl.cpp
const CL::G CL::GS = {0};
于 2012-10-30T09:21:34.640 に答える
-1

構造体を初期化するためのコンストラクターを定義してみませんか。

class CL
{
public:
    CL() {};
    ~CL() {};

    struct G
    {
        int a;
        G() { memset(this, 0, sizeof(G)); }
    };

    G GS;
};
于 2012-10-30T09:26:10.707 に答える