2011-06-19 26 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;