得到“在* .c文件中使用静态变量时没有命名类型”

时间:2013-09-13 06:55:30

标签: c++ android-ndk

我正在使用android ndk和g ++编译来自GDAL的frmts / gtiff / libtiff / tif_dirinfo.c文件。 tiffFieldArray在开头定义为静态变量。

static TIFFFieldArray tiffFieldArray;

然后我在同一个文件中使用它:

tiffFieldArray = { tfiatImage, 0, TIFFArrayCount(tiffFields), tiffFields };

但得到了错误:

../../frmts/gtiff/libtiff/tif_dirinfo.c:264:1: error: 'tiffFieldArray' does not name a type

为什么?

在tif_dir.h中,结构定义:

#if defined(__cplusplus)
extern "C" {
#endif

...

struct _TIFFFieldArray {
        TIFFFieldArrayType type;    /* array type, will be used to determine if IFD is image and such */
        uint32 allocated_size;      /* 0 if array is constant, other if modified by future definition extension support */
        uint32 count;               /* number of elements in fields array */
        TIFFField* fields;          /* actual field info */
};
...

#if defined(__cplusplus)
}
#endif

1 个答案:

答案 0 :(得分:1)

您无法从初始化列表中分配变量:

tiffFieldArray = { tfiatImage, 0, TIFFArrayCount(tiffFields), tiffFields };

此语法仅适用于变量定义,而不适用于赋值。用以下代替该行:

    tiffFieldArray[0] =  tfiatImage;
    tiffFieldArray[1] =  0;
    tiffFieldArray[2] =  TIFFArrayCount(tiffFields);
    tiffFieldArray[3] =  tiffFields;

编辑(在问题中添加了mor信息后)

tiffFieldArray有一个误导性的名称,因为它是一个结构,而不是一个数组。无论如何,我发布的上一个解决方案在这种情况下无效。试着写:

    tiffFieldArray.type =  tfiatImage;
    tiffFieldArray.allocated_size =  0;
    tiffFieldArray.count =  TIFFArrayCount(tiffFields);
    tiffFieldArray.fields =  tiffFields;