реклама на сайте
подробности

 
 
> Библиотека работы с файловой системой Petit FatFs R0.02a, Банальный вопрос по привидению типов
Twen
сообщение Sep 26 2011, 14:40
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Скачал библиотеку работы с файловой системой Petit FatFs R0.02a.
Прикрутил , не не могу скомпилировать...

Есть функция :

FRESULT pf_read (
void* buff, /* Pointer to the read buffer (NULL:Forward data to the stream)*/
WORD btr, /* Number of bytes to read */
WORD* br /* Pointer to number of bytes read */
)
{
DRESULT dr;
CLUST clst;
DWORD sect, remain;
WORD rcnt;
BYTE cs, *rbuff = buff; / !!!!!!!!!!!!!!!Ругается
....
....
}

Пишет что указатель типа BYTE не может быть инициализирован buff, который имеет тип void*...
Error [Pe144]: a value of type ''void *" cannot be used to initialize an entity of type "BYTE*"

Я писал *rbuff = (BYTE)buff, но пишет ошибку...


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
skripach
сообщение Sep 26 2011, 14:50
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
!!!!!!!!!!!!!!!Ругается

А у меня не ругается.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Ivan Panov
сообщение Sep 26 2011, 16:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-02-09
Из: Одесская обл.
Пользователь №: 45 249



Цитата(Twen @ Sep 26 2011, 17:40) *
Я писал *rbuff = (BYTE)buff, но пишет ошибку...


Компилятор IAR?
Было такое сообщение.
Вы приводите не к тому типу. Должно быть так: *rbuff = (BYTE*)buff
Go to the top of the page
 
+Quote Post
skripach
сообщение Sep 26 2011, 16:36
Сообщение #4


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Должно быть так: *rbuff = (BYTE*)buff

так должно быть если так
Код
BYTE cs, *rbuff = (BYTE*)buff;

иначе
Цитата
*rbuff = (BYTE)buff;

Вобщем пусть ТС словами напишет чего хочет.



--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Ivan Panov
сообщение Sep 26 2011, 17:11
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-02-09
Из: Одесская обл.
Пользователь №: 45 249



Цитата(skripach @ Sep 26 2011, 19:36) *
так должно быть если так
Код
BYTE cs, *rbuff = (BYTE*)buff;


Вы совершенно правы, именно это я и хотел написать:
Код
BYTE *rbuff= (BYTE*)buff;

по невнимательности ввёл спрашивающего в заблуждение.

Сообщение отредактировал Ivan Panov - Sep 26 2011, 17:12
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 26 2011, 19:48
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Twen @ Sep 26 2011, 17:40) *
Пишет что указатель типа BYTE не может быть инициализирован buff, который имеет тип void*...
Error [Pe144]: a value of type ''void *" cannot be used to initialize an entity of type "BYTE*"
А вы случаем не в режиме C++ компилируете? В таком случае правильно ругается. В С++ разрешено неявное приведение любого указателя к void *, но не наоборот. В С оба приведения являются легальными. Библиотека написана на С. Вам необходимо сделать явное преобразование. Как именно - выше подсказали.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Twen
сообщение Sep 27 2011, 06:27
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Спасибо, вы все были правы.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 14:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016