У меня есть реализация буфера объектов, которая выглядит так:
class obj_buffer_t
{
public:
obj_buffer_t(char *heap, size_t size, size_t cnt);
// Some other stuff
private:
// Some other stuff
};
Запись_objbuf создается как статический буфер:
static obj_buffer_t::buffer_t<obj_buffer_min_heap_size_t< sizeof(Record_XY), RECORD_SIZE>::result> record_buffer;
obj_buffer_t record_objbuf(record_buffer.heap, sizeof record_buffer.heap, RECORD_SIZE);
В моей программе я хочу читать записи и создавать их в этом буфере, но как мне позвонить на мой метод?
Подпись метода следующая:
Record * getRecord(unsigned & addr, Info & info, void * objbuf = NULL);
Мой вызов:
record = tm.getRecord(p, info, static_cast<obj_buffer_t *>(record_objbuf));
Компилятор дает мне ошибку: недопустимый static_cast от типа obj_buffer_t
для ввода obj_buffer_t*
Если я вообще не использую бросок, я получаю:
нет соответствующей функции для вызова getRecord(uint32_t&, Info&, obj_buffer_t&)
Что я здесь делаю неправильно?
Спасибо!
Ошибка "Недействительный static_cast от типа obj_buffer_t для типа obj_buffer_t *" означает, что record_objbuff
- это сам объект, а не указатель на этот объект. Ваша функция нуждается в указателе. Поэтому вы должны использовать оператор unary &
для получения адреса объекта в качестве указателя:
record = tm.getRecord( p, info, (void*)&record_objbuf );
record = tm.getRecord( p, info, (void*)&record_objbuf )