【发布时间】:2014-02-15 14:25:45
【问题描述】:
我发现了很多关于此的线程,但似乎没有一个有效。这可能只是一个指针问题,我需要在正确的位置放置正确数量的星星,但我无法弄清楚。
我想从最初是 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 列(只有一个条目)。目标数组是 p_map,它是“无符号字符”的 3D 数组。但是 SQLcolumn_blob 返回一个 const void*。
所以我的想法是创建一个指向“无符号字符”的指针。然后将“const void*”转换为“unsigned char*”。然后将 unsigned char 指针用作数组。但似乎:
*tmpmap [ k ] [ j ] [ i ];
是非法的。我不能使用指针并将其重新解释为数组。这就是虽然部分,因为数组是指针,但声明不同。
感谢您的帮助。
【问题讨论】:
标签: c++ arrays sqlite void-pointers