我正在使用一个使用按位操作和文件长度的函数:fpos_t flen;
当我尝试将其转换为int或char,或尝试对其进行算术运算时,它会因以下编译错误而失败:
error: aggregate value used where an integer was expected
答案 0 :(得分:6)
你误用了那种类型。首先,它不代表长度。它代表位置。其次,它仅用于调用fsetpos
。你不打算对它进行算术,因为它不一定代表数字类型。它包含您的库需要能够执行fsetpos
操作的任何信息。在库的实现中,fpos_t
似乎是聚合类型,例如结构。 (您可以检查头文件中的定义以确定,但不要依赖于您在那里发现的任何内容;它可能在其他平台或标准库的未来版本中有所不同。)
至于你的下一步,考虑一个更直接的问题,当你提出在fpos_t
上进行按位操作的想法时,如何解决你正在处理的任何问题。
答案 1 :(得分:2)
当我尝试这样做时,我遇到了同样的错误: char aux =(char)flen& 15,flen是fpos_t。 我在这里找到了一个解决方案:http://dsmarkchen.blogspot.com.br/2008/08/fpost.html。 它应该是: char aux = flen .__ pos& 15。
答案 2 :(得分:0)
听起来您希望将当前文件位置作为整数使用。如果是这样,你可能想要使用ftell / fseek(或他们的64位兄弟),而不是fgetpos / fsetpos。两者都是类似的操作,但ftell / fseek使用整数值,而fgetpos / fsetpos使用有意抽象的结构。