我发现很多关于此的线程,但它们都不起作用。这可能只是一个指针mayem我需要在正确的地方放置正确数量的星星,但我无法弄清楚。返回并投射数组指针(错误:无效类型...对于数组下标)
我想从最初是3维数组的SQLITE数据库中读取一个blob。 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个条目)读取列1。目标数组是p_map,它是一个“无符号字符”的三维数组。但是SQLcolumn_blob返回一个const void *。
所以我的想法是创建一个指向“无符号字符”的指针。然后将“const void *”转换为“unsigned char *”。然后使用unsigned char指针作为数组。但看来:
*tmpmap [ k ] [ j ] [ i ];
是非法的。我不能使用指针并将其重新解释为数组。所以这是虽然部分,因为数组是指针,但声明不同。
谢谢你的帮助。
啊!我懂了。我会试着看看它是否有效。我使用C和C++的混合体,所以我不介意以旧的方式投射。 – user3313505
我试着用reinterpret强制转换这个方法。汇编工作,但结果并不如人意。地图数据被分散。我结束了使用abligh的方法 – user3313505