错误:'='标记之前的预期标识符

Eth*_*one 3 c++ mingw librocket

我正在尝试编译库.

class ROCKETCORE_API Property
{
public:
enum Unit
{
    UNKNOWN = 1 << 0,

    KEYWORD = 1 << 1,           // generic keyword; fetch as < int >

    STRING = 1 << 2,            // generic string; fetch as < String >

    // Absolute values.
    NUMBER = 1 << 3,            // number unsuffixed; fetch as < float >
    PX = 1 << 4,                // number suffixed by 'px'; fetch as < float >
    COLOUR = 1 << 5,            // colour; fetch as < Colourb >
    ABSOLUTE_UNIT = NUMBER | PX | COLOUR,

    // Relative values.
    EM = 1 << 6,                // number suffixed by 'em'; fetch as < float >
    PERCENT = 1 << 7,           // number suffixed by '%'; fetch as < float >
    RELATIVE_UNIT = EM | PERCENT,

    // Values based on pixels-per-inch.
    IN = 1 << 8,                //<<----LINE 66----- number suffixed by 'in'; fetch as < float >
    CM = 1 << 9,                // number suffixed by 'cm'; fetch as < float >
    MM = 1 << 10,               // number suffixed by 'mm'; fetch as < float >
    PT = 1 << 11,               // number suffixed by 'pt'; fetch as < float >
    PC = 1 << 12,               // number suffixed by 'pc'; fetch as < float >
    PPI_UNIT = IN | CM | MM | PT | PC
};
Run Code Online (Sandbox Code Playgroud)

错误输出是:

Property.h:66:6: error: expected identifier before '=' token
Property.h:66:6: error: expected '}' before '=' token
Property.h:66:6: error: expected unqualified-id before '=' token
Run Code Online (Sandbox Code Playgroud)

还有其他错误,我相信这个枚举没有被正确定义.

知道为什么会这样吗?

在Eclipse中使用MinGW 4.7.2.

AnT*_*AnT 9

在这种情况下的典型问题是与您包含的某些标头中定义的某个宏名称冲突.在你的情况下,IN在某些实现中(MS?)被用作指定函数中输入参数的宏.

一个好主意是给你的枚举常量一个前缀,UNIT_UNKNOWN而不仅仅是UNKNOWN.或者,您可以#undef IN在包括所有"系统"标题之后执行,但这种方法很容易最终成为非常"高维护".更好的想法是避免使用短的全大写标识符.

  • 考虑到错误信息,这可能是一个原因. (2认同)