在一元&中投射相关的无效左值

时间:2009-01-02 20:35:26

标签: c gcc

我使用gcc 3.4.6获得了无效的左值错误。调用错误的行有一个函数,它接收一个指向SetElement(typedef void*)的指针。我试图通过以下方式使用其他类型(也是typedef void*)来实现此目的:&((SetElement)my_var)。 gcc抱怨这个。知道可以做些什么吗?

1 个答案:

答案 0 :(得分:3)

您正在获取暂时(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_varlvalue),而不是(SetElement)my_varrvalue)。

相关问题