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