Приведите fpos_t к int или char - PullRequest
       25

Приведите fpos_t к int или char

4 голосов
/ 24 декабря 2011

Я работаю с функцией, которая использует побитовые операции с длиной файла: fpos_t flen;

Когда я пытаюсь привести его к типу int или char или попытаться выполнить арифметическую операцию над нимзавершается со следующей ошибкой компиляции: error: aggregate value used where an integer was expected

Ответы [ 3 ]

6 голосов
/ 24 декабря 2011

Вы неправильно используете этот тип.Во-первых, это не представляет длину.Он представляет собой позицию .Во-вторых, он предназначен только для вызова на fsetpos.Вы не должны делать арифметику, потому что это не обязательно представляет числовой тип.Он содержит любую информацию, которая необходима вашей библиотеке для выполнения операции fsetpos.В реализации вашей библиотеки fpos_t представляется агрегатным типом, таким как struct.(Вы можете проверить определение в заголовочных файлах, чтобы быть уверенным, но не полагайтесь на то, что вы там найдете; оно может отличаться на других платформах или в будущих версиях вашей стандартной библиотеки.)

Что касаетсяваш следующий шаг, подумайте над тем, чтобы задать более прямой вопрос о том, как решить любую проблему, над которой вы работали, когда у вас возникла идея выполнять побитовые операции над fpos_t.

2 голосов
/ 25 июня 2012

Я получал ту же ошибку, когда пытался сделать это: char aux = (char) flen & 15, где flen был fpos_t.Я нашел решение здесь: http://dsmarkchen.blogspot.com.br/2008/08/fpost.html.Должно быть: char aux = flen .__ pos & 15.

0 голосов
/ 29 сентября 2014

Звучит так, будто вы хотите работать с текущей позицией файла как целое число. Если это так, вы, вероятно, захотите использовать ftell / fseek (или их 64-битных собратьев), а не fgetpos / fsetpos. Обе они выполняют аналогичные операции, но ftell / fseek работают с целочисленными значениями, а fgetpos / fsetpos работают с намеренно абстрактной структурой.

...