например, которые работают:-значение требуется в качестве левого операнда назначения
#define DIR(n,d) (d==LEFT?n.left:n.right)
struct node {
struct node*left;
struct node*right;
int value;
};
struct node n;
n.left=malloc(sizeof(struct node));
n.right=malloc(sizeof(struct node));
DIR(n,d)->value=26;
(d==1?n.left:n.right)->value=26;
пример, который (не работает):
#define DIR(mem,d) d==LEFT?mem->left:mem->right
или
#define DIR(mem,d) (d==LEFT?(*mem).left:(*mem).right)
другой структура:
struct Node{
char color;
int height;
Node* parent;
Node* left;
Node* right;
Container*data;
};
В основной функции я сделать следующее:
Node*temp;
Node*mem=malloc(sizeof(Node));
d=LEFT;
temp=malloc(sizeof(Node));
DIR(mem,d) = temp;
Ошибка: именующим требуется в качестве левого операнда назначения DIR (MEM, д) = темп;
спасибо.
В сообщении об ошибке указано, что очистить. Значение LHS не является значением lvalue. Это происходит, когда вы слишком задумываетесь о макросах. Решение: не используйте такие макросы. Они не стоят хлопот, которые вы получаете при отладке и не оставляете печатать. Что случилось с 'mem-> left'? (FYI: 'p-> m' ** идентичен ** на' (* p) .m'. Не используйте последнюю (более типичную, менее ясную). – Olaf
Итак, какой ответ будет? do? Как я мог получить доступ к элементу структуры во втором случае? –
Чтобы улучшить ваш вопрос, удалите все, что «работает». Вам нужно только опубликовать то, что не работает. Существует около 4 строк соответствующей информации и куча У меня есть код: –