我正在尝试编译库。
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。
答案 0 :(得分:8)
此类情况下的典型问题是与您包含的某些标头中定义的某个宏名称冲突。在你的情况下,IN
,在某些实现中(MS?)被用作指定函数中输入参数的宏。
一个好主意是给你的枚举常量一个前缀,比如UNIT_UNKNOWN
而不是UNKNOWN
。或者,您可以在包含所有“系统”标题后执行#undef IN
,但这种方法很容易就会变得非常“高度维护”。更好的想法是避免使用短的全大写标识符。