在非结构或联合的事物中请求成员'_file'[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在非结构或联合的事物中请求成员'_file'[关闭]相关的知识,希望对你有一定的参考价值。

我收到这个错误:

somedir/somefile.c: In function 'somefunc':
somedir/somefile.c:433:33: error: request for member '_file' in something not a 
structure or union
     ReturnValue->Val->Integer = _fileno(Param[0]->Val->Pointer);
                                 ^

在尝试编译下一个代码时:

void somefunc(struct p *P, struct Value *ReturnValue, struct Value **Param, int n)
{
    ReturnValue->Val->Integer = _fileno(Param[0]->Val->Pointer);
}

ReturnValue是指向struct Value的指针,并且有一个指向union的指针里面有int Integer

union SomeValue
{
    int Integer;
    void *Pointer;
}

struct Value
{
    union SomeValue *Val;
}

Param也类似。我的意思是,一切似乎都是正确的,因为我还有另外一个像这样的功能,我没有任何错误,只有这个。怎么了?它与_fileno功能有关吗?当我将_fileno改为fileno时,同样的事情发生了。

答案

在这种情况下,_filno被定义为宏;扩展宏时,尝试取消引用指针参数并访问_file成员,例如arg->_file。然而,这将失败,因为你不能尊重void*

指针应该是FILE*类型或者从有效的FILE*对象赋值,然后在传递给_fileno()时进行转换:

ReturnValue->Val->Integer = _fileno( (FILE*)Param[0]->Val->Pointer ) ; 

以上是关于在非结构或联合的事物中请求成员'_file'[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

编译时在非结构或联合中获取成员“indexPath”的错误请求

目标 C:在非结构或联合的情况下请求成员 XXX。 (核心数据)

编译错误:请求非结构或联合中的成员

CoreData 和访问关系的问题:请求非结构或联合中的成员

分配给具有数组类型的表达式并请求非结构或联合中的成员[关闭]

C 错误中的 Printf linkedList