Cast fpos_t to int or char
Solution 1
You're misusing that type. First, it doesn't represent a length. It represents a position. Second, it's only meant to use in a call to fsetpos
. You're not meant to do arithmetic on it because it doesn't necessarily represent a numeric type. It contains whatever information your library needs to be able to perform an fsetpos
operation. In your library's implementation, fpos_t
appears to be an aggregate type, such as a struct. (You can check the definition in the header files to be sure, but don't rely on whatever you discover there; it's liable to differ on other platforms or in future versions of your standard library.)
As for your next step, consider asking a more direct question about how to solve whatever problem you were working on when you came up with the idea to do bitwise operations on a fpos_t
.
Solution 2
I was getting the same error when i was trying to do this: char aux = (char)flen & 15, where flen was fpos_t. I found a solution here: http://dsmarkchen.blogspot.com.br/2008/08/fpost.html . It should be: char aux = flen.__pos & 15.
Solution 3
It sounds like you want to work with current file position as an integer. If so, you'll probably want to use ftell/fseek (or their 64-bit brethren), rather than fgetpos/fsetpos. Both serve analogous operations, but ftell/fseek work with integral values, while fgetpos/fsetpos work with an intentionally-abstract structure.
sj755
Updated on June 04, 2022Comments
-
sj755 almost 2 years
I'm working with a function that uses bitwise operations with the length of a file:
fpos_t flen;
When I try casting it to an int or char, or attempt on arithmetic operation on it, it fails with the following compilation error:
error: aggregate value used where an integer was expected
-
sj755 over 12 yearsI went through gdb. In linux (Fedora 15), there is a member variable called __pos, that appears to hold the length. I'm thinking maybe the author was going for this originally.
-
Rob Kennedy over 12 yearsMaybe. But there's no guarantee that the
__pos
member means what you or the other author think it means. -
sj755 over 12 yearsI asked the guy who gave me the code. He said it compiled just fine under Solaris when he used it a few years back. I installed Solaris 11 on VMWare, compiled the program, and found that fpos_t is an integer type. In other words, fpos_t on Solaris is the same thing as fpos_t.__pos on Linux. I've since changed the code, got it to compile, and found that it works correctly.
-
rwst about 5 yearsAgain, this is not guaranteed to work on every machine (see above).