2011-06-19 3 views
0

C++でWindowsフォームアプリケーションでユニオンを使用しようとしています。私のコードは次のようになります:Visual C++でのユニオンの使用

union mytypes1_t { 
    unsigned long mylong; 
    char mychar; 
} mytypes1; 

私のForm1.hファイルの先頭に含まれており、後:

for (int num = 0;num<3;num++) { 
mytypes1.mychar[0]='a'; 
} 

ボタンがクリックされたとき。私はエラーを取得する

は...私が間違っているつもりです

「添字が配列またはポインタータイプが必要ですか」?

+0

'mychar'は配列ではありません。これをやりたかったのですか? 'mytypes1.mychar = 'a''? –

答えて

2

あなたmycharが配列またはあなたの代わりにそのようにそれを宣言することができポインタではありません。

union mytypes1_t { 
    unsigned long mylong; 
    char mychar[4]; 
} mytypes1; 
+0

ありがとう!私はそれを見ていないとは信じられない! – JonaGik

0

char mychar;は、アレイでもでもありません。ポインタタイプです。

for (int num = 0;num<3;num++) { mytypes1.mychar[0]='a'; } 
               ^^^ 

ループは意味をなさない。

0

エラーのように、添字[]は配列またはポインタ型でのみ使用できます。

mytypes1.mycharは、タイプcharです。これは配列でもポインタでもありません。

配列は、このようなものになるだろう:char mychar[12];

ポインタはこのようなものになるだろう:char* mychar; - しかし、あなたは、ポインタを使用している場合、それは最初に何かを指すようにしてください(例えば、ヒープ割り当てなどアレイ)。

0

charは単一の文字です。 char*またはchar[]を実行すると、複数の文字をコンピュータに格納することができます。これはまた、あなたがしようとしたように配列のような非ポインタ文字にアクセスすることができないことを意味しています(配列は本質的にポインタを格納するためのものです)。

次のようにコードを変更することができます。

union mytypes1_t { 
    unsigned long mylong; 
    char *mychar; 
} mytypes1; 
関連する問題