【问题标题】:Request for member '_file' in something not a structure or union [closed]在非结构或联合的情况下请求成员“_file”[关闭]
【发布时间】:2017-11-30 19:24:13
【问题描述】:

我收到此错误:

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 时,也会发生同样的事情。

【问题讨论】:

  • Param[0]->Val->Pointer 是文件吗?
  • 我在您提供的声明中没有看到任何名为 Pointer 的成员。
  • 没有函数:_fileno也许你的意思是:fileno
  • _fileno 是 MSVC 功能,他们以他们的智慧弃用 fileno

标签: c pointers struct unions


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多