C - недопустимое использование массива не lvalue - PullRequest
7 голосов
/ 11 июля 2011

У меня есть матричная структура:

typedef struct Matrix
{
    float m[16];
} Matrix;

Когда я пытаюсь вызвать эту функцию:

memcpy(m->m, MultiplyMatrices(m, &translation).m, sizeof(m->m));

Я получаю ошибку во время компиляции, говоря:

ошибка: недопустимое использование массива без значения

MultiplyMatrices возвращает матрицу.

Я получаю эту ошибку, только если использую gcc для компиляции файла в объект, еслиЯ использую g ++ для компиляции объекта, я не получаю ошибки.

Я даже не уверен, что означает ошибка, у меня такое ощущение, что это связано с массивом, хранящимся в матрице, возвращаемой MultiplyMatrices.

Если вам нужно увидеть больше кода, дайте мнезнать.

Этот код взят из этого урока: Глава 4 книги OpenGL

ps Я бы хотел придерживаться строгого iso / ansi этого кода, если нет другого решенияоднако, тогда мне просто придется иметь дело с этим.

РЕДАКТИРОВАТЬ: я закончил с созданием временной матрицы, а затем скопировать массив.

Matrix tempMatrix;

...

tempMatrix = MultiplyMatrices(m, &translation);
memcpy(m->m, tempMatrix.m, sizeof(m->m));

1 Ответ

8 голосов
/ 11 июля 2011

Возвращаемое значение MultiplyMatrices() не является lvalue (как и возвращаемое значение любой функции), что означает, что вы не можете получить его адрес. Оценка массива (включая член массива структуры) неявно берет адрес первого элемента, поэтому вы не можете этого сделать.

Однако вы можете использовать простое назначение struct:

*m = MultiplyMatrices(m, &translation);

Пока ваш struct содержит только один элемент, как вы показали, это точно так же.

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