2013-02-04 60 views
2

我正在尝试编译一个库。错误:'='令牌之前的预期标识符

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 
}; 

错误输出是:

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 

而且有我相信通过此枚举没有被正确定义造成其他错误。

任何想法为什么发生这种情况?

在Eclipse中使用MinGW 4.7.2。

+1

这个枚举编译得很好。你如何使用它? – chris

+3

哪一行是66? – AnT

+0

我应该整个文件吗? – Etherealone

回答

8

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

一个好主意是给你的枚举常量前缀,如UNIT_UNKNOWN而不是只是UNKNOWN。或者,在包含所有“系统”头文件后,您可以执行#undef IN,但这种方法很容易导致非常“高维护”。一个更好的主意是再次避免使用短全帽标识符。

+0

来吧,这不是一个正确的答案。这应该是一个评论。 – antonijn

+2

考虑到错误消息,这可能是一个原因。 – chris

+0

@chris最新的编辑阻止了我的投票。 – antonijn

相关问题