我一直在尝试使用此声明,但无论是在Visual Studio 2012还是CodeBlocks(使用GCC),它都不会构建。
(来自http://netghost.narod.ru/gff2/graphics/summary/fli.htm)
typedef struct _ColormapChunk
{
CHUNKHEADER Header; /* Header for this chunk */
WORD NumberOfElements; /* Number of color elements in map */
struct _ColorElement /* Color element (one per NumberOfElements) */
{
BYTE SkipCount; /* Color index skip count */
BYTE ColorCount; /* Number of colors in this element */
struct _ColorComponent /* Color component (one /'ColorCount') */
{
BYTE Red; /* Red component color */
BYTE Green; /* Green component color */
BYTE Blue; /* Blue component color */
} ColorComponents[ColorCount];
} ColorElements[NumberOfElements];
} COLORMAPCHUNK;
Visual Studio:错误C2327:'_ ColorMapChunk :: _ ColorElement :: ColorCount':不是类型名称,静态或枚举器
CodeBlocks: 错误:无效使用非静态数据成员'_ColormapChunk :: _ ColorElement :: ColorCount'
关于这些问题,可以在C ++ 11下解释:
Why can't I initialize non-const static member or static array in class?
Can you use the sizeof one member when declaring another member?
所以在CodeBlocks上我勾选了选项:
让g ++遵循C ++ 11 ISO语言标准[-std = c ++ 11]
在VS上我找不到这样的选项,在CodeBlocks上它还没有编译。
此声明是否可以使用,还是需要进行一些更改?如果是的话,哪些?
答案 0 :(得分:5)
该文档是描述文件格式的 C-like 语法。由于“可变长度”字段,故意不能编译。