ошибка C2088: '+ =': недопустимо для объединения на visual studio с c - PullRequest
0 голосов
/ 29 апреля 2020

Привет, я получаю ошибку C2088: '+ =': недопустимо для ошибки объединения в visual studio ... для того же кода, работающего правильно на g cc. Не могли бы вы сообщить мне решение, чтобы решить эту проблему в c с Visual Studio.

typedef union {
    float sm[8];
} Su;


typedef union {
    Su v;
    float bm[8];
} Bu;

int main() {
    Bu A1, A2;

    A2.v.sm[0] = 12.5;

    // .... some assignments here 

    A1.v += A2.v;     //      <<<<<<<<<<<< error here

    return 0;
}

1 Ответ

2 голосов
/ 29 апреля 2020

v член A1 и A2 является типом объединения с одним элементом массива sm, а += не определен для типов объединения. Если вы хотите добавить значения A2.v.sm к значениям A1.v.sm, то вам нужно будет использовать al oop:

for ( size_t i = 0; i < 8; i++ )
  A1.v.sm[i] += A2.v.sm[i];

Edit

Глава и стих :

6.5.16.2 Составное назначение

Ограничения

1 Только для операторов += и -= либо левый операнд должен быть атомом c, квалифицированным или неквалифицированным указателем на полный тип объекта и правым должен иметь целочисленный тип; или левый операнд должен иметь атомный тип c, квалифицированный или неквалифицированный арифметический тип c, а правый должен иметь арифметический тип c.
...