Я нашел много потоков об этом, но ни один из них не работает. Вероятно, это просто указатель mayem, где мне нужно разместить правильное количество звезд в нужном месте, но я не могу понять это.Возвращение и литье указателя массива (Ошибка: недопустимые типы ... для индекса массива)
Я хочу прочитать blob из базы данных SQLITE, которая изначально представляла собой трехмерный массив. Sqlite возвращает «const void *», и мне нужно преобразовать его во временный указатель таблицы, чтобы я мог выполнить передачу в реальную таблицу. Но я получаю:
error: invalid types ‘unsigned char[int]’ for array subscript
при попытке передать значения из таблицы в другую. Вот пример кода.
примечание: функции с префиксом SQL ... являются персональными оболочками для SQLITE, и они должны работать отлично.
void Map::load (void)
{
int i, j, k;
int errorsql;
unsigned char *tmpmap; //[ Map_MAXDEPTH ] [ Map_MAXWIDTH ] [ Map_BYTE_WIDTH ];
SQLactivate_errormsg();
errorsql = SQLprepare ("SELECT * FROM handmap;");
if (errorsql == SQLITE_OK)
{
errorsql = SQLstep();
if (errorsql == SQLITE_ROW)
{
tmpmap = (unsigned char*) SQLcolumn_blob (1); // return the pointer to the blob
for (k = 0 ; k < Map_MAXDEPTH; k++)
for (j = 0 ; j < Map_MAXWIDTH; j++)
for (i = 0; i < Map_BYTE_WIDTH; i++)
{
p_map [ k ][ j ][ i ] = *tmpmap [ k ] [ j ] [ i ]; // try to copy from a table to another. Compiler fails here.
}
}
else
printf ("Map.load: Cannot step into the DB\n");
SQLfinalize();
}
else
printf ("Map.load: Cannot Prepare statement to save map into the DB\n");
SQLdeactivate_errormsg();
}
Код очень прост, он пытается прочитать колонку 1 из первой записи в таблице (имеется только одна запись). Целевой массив - это p_map, который представляет собой трехмерный массив «unsigned char». Но SQLcolumn_blob возвращает const void *.
Так что моя идея заключалась в создании указателя на «unsigned char». Затем преобразуйте «const void *» в «unsigned char *». И затем используйте указатель без знака в виде массива. Но кажется, что:
*tmpmap [ k ] [ j ] [ i ];
является незаконным. Я не могу использовать указатель и переинтерпретировать его как массив. Так что это части, хотя массивы являются указателями, но объявлены по-разному.
Благодарим за помощь.
Ah! Понимаю. Я попытаюсь посмотреть, работает ли это. Я использую смесь C и C++, поэтому я не против бросать старый путь. – user3313505
Я пробовал этот метод с реинтерпретом. Компиляция работала, но результаты не были желательными. Данные карты были рассеяны. Я закончил использовать метод abligh – user3313505