0

私はこのような定義された構造体を持っています:

typedef struct tag_GLOBAL_VAR
{
    int array1[4];
    int array2[5];
    .......
    int array20[40];
 }GLOBAL_VAR;

この構造は、あるクラスで変数を定義するために使用されます。

GLOBAL_VAR g_GlobalVar;

次に、次のような別のクラスで使用されます。

extern GLOBAL_VAR g_GlobalVar;

class constructor;

class destructor;

int class::Start()
{
     //g_GlobalVar.array1 = {1,2,3,4};
     //g_GlobalVar.array4 = {1,2,3};
     some code;
 }

私の問題は、そのような2つの配列を初期化(コメント行)できないことです。VSerror C2059: syntax error : '{'からを取得します。なぜこれが間違っているのですか、そしてそれを行うための解決策はどれですか?

4

5 に答える 5

5

これは初期化ではなく、新しい値を設定するため、これは間違っています。g_GlobalVarを宣言したときに、配列はすでに初期化されています。

2つの解決策があります。A)新しい配列を作成し、実行しようとしているようにそれらを初期化し、ループ内の配列に新しい配列をコピーします。B)各配列の各エントリを個別に設定します。

于 2012-08-15T12:32:08.997 に答える
2

特別な配列初期化構文は、ご想像のとおり、配列初期化でのみ使用できます。それ以外の場合は、値を1つずつ設定する必要があります。

ただし、構造体の割り当て(初期化子と組み合わせて)を使用すると、次のようなショートカットが可能になります。

GLOBAL_VAR temporary = { {1,2,3}, {4,5,6} };
g_GlobalVar = temporary;

他の解決策には、以下の使用が含まれますmemcpy

int temp1[] = {1,2,3,4};
memcpy(g_GlobalVar.array1, temp1, sizeof temp1);
于 2012-08-15T12:38:24.020 に答える
1

宣言後にそのような方法で配列の値を初期化することはできません。このような構文は、次のように、配列を一度に宣言して設定する場合にのみ可能です。

int array[5] = {1, 2, 3, 4, 5};

他のすべての場所では、すべての要素を設定する必要があります。

于 2012-08-15T12:32:19.373 に答える
1

複数のメンバー配列を一度に初期化する必要がある場合は、次のようにすることができます

const GLOBAL_VAR my_const = {{1,2,3,4}, {}, {}, {1,2,3}};  
g_GlobalVar = my_const;
于 2012-08-15T12:38:13.990 に答える
0

インプレース初期化({...})は、PODのC++11でのみサポートされます。

于 2012-08-15T12:33:26.180 に答える