我正在使用gcc 3.4.6获取无效的左值错误。调用错误的行具有一个函数,该函数接收指向SetElement(即typedef void*)的指针。我正试图通过从另一种类型(也typedef void*)通过以下方式来实现这一点:&((SetElement)my_var)。海合会对此表示不满。知道怎么办吗?

最佳答案

您正在获取临时(anrvalue)的地址,这是无法完成的。这就像是在尝试:

&(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(anlvalue),而不是(SetElement)my_var(anrvalue)。

关于c - 在一元&中强制转换相关的无效左值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/407953/

10-09 12:43