以非结构或联合的形式请求成员“_file”

Request for member '_file' in something not a structure or union

我收到这个错误:

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 ) ;