Использование союзов в Visual C ++ - PullRequest
0 голосов
/ 19 июня 2011

Я пытаюсь использовать Union в приложении Windows Forms на C ++.Мой код выглядит так:

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

После включений в верхней части моего файла Form1.h и:

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

При нажатии кнопки.

Я получаю сообщение об ошибке ... "индекс требует типа массива или указателя"

Где я ошибаюсь?

Ответы [ 4 ]

2 голосов
/ 19 июня 2011

Ваш mychar не является массивом или указателем, вместо этого вы можете объявить его так:

union mytypes1_t {
    unsigned long mylong;
    char mychar[4]; 
} mytypes1;
0 голосов
/ 19 июня 2011

A char - один символ. Когда мы делаем char* или char[], это позволяет нам хранить несколько символов на компьютере. Это также означает, что вы не можете обращаться к не указательным символам, как к массиву, как вы пытались это сделать (поскольку массивы являются по существу удобной формой указателей, когда речь идет о хранении вещей).

Вы можете изменить свой код на следующее:

union mytypes1_t {
    unsigned long mylong;
    char *mychar;
} mytypes1;
0 голосов
/ 19 июня 2011

Ну, как говорится в ошибке, вы можете использовать только индекс [] только с массивом или указателем типа.

mytypes1.mychar имеет тип char - Это не массив и не указатель.

Массив будет выглядеть примерно так: char mychar[12];

Указатель будет выглядеть примерно так: char* mychar; - но если вы используете указатель, сначала убедитесь, что он указывает на что-то (например, массив, выделенный в куче).

0 голосов
/ 19 июня 2011

char mychar; не является массивом или указателем типа.

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

и цикл не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...