Приведение связанных недействительных lvalue в унарный & - PullRequest
1 голос
/ 02 января 2009

Я получаю недопустимую ошибку lvalue, используя gcc 3.4.6. Строка, которая вызывает ошибку, имеет функцию, которая получает указатель на SetElement (который равен typedef void*). Я пытаюсь добиться этого, используя приведение из другого типа (также typedef void*) следующим образом: &((SetElement)my_var). GCC жалуется на это. Есть идеи, что можно сделать?

1 Ответ

3 голосов
/ 02 января 2009

Вы берете временный адрес (rvalue), что невозможно сделать. Это все равно что пытаться сделать:

&(2+2)
// or
&4
// or
&(my_ptr + 4)

Вы можете создать временный файл самостоятельно (таким образом, lvalue), используя один из двух методов:

AnotherType **my_var_ptr = &my_var;
SetElement **set_element_ptr = (SetElement *)my_var_ptr;

// or

SetElement *set_element = (SetElement)my_var;
SetElement **set_element_ptr = &set_element;

Или вы можете просто разыграть другим способом ( решение ):

SetElement **set_element_ptr = (SetElement *)&my_var;

Это работает, потому что вы берете адрес my_var (lvalue), а не (SetElement)my_var (rvalue).

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