这个声明在哪个编译器有效?

时间:2013-02-24 16:29:47

标签: c++

我一直在尝试使用此声明,但无论是在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上它还没有编译。

此声明是否可以使用,还是需要进行一些更改?如果是的话,哪些?

1 个答案:

答案 0 :(得分:5)

该文档是描述文件格式的 C-like 语法。由于“可变长度”字段,故意不能编译。