我有一个有长度单位枚举的类。
class LengthUnit
{
public:
enum Value
{
IN,
CM,
FT
};
static double convert(double value, Value from, Value to){
if (from == to) return value;
return value * getScale(from)/getScale(to);
}
constexpr LengthUnit(Value value) : value(value) {}
bool operator==(LengthUnit lUnit) const { return value == lUnit.value; }
bool operator!=(LengthUnit lUnit) const { return value != lUnit.value; }
private:
static double getScale(Value value){
switch (value){
case IN: return 2.54; // 1 in = 2.54 cm
case FT: return 30.48; // 1 ft = 30.48 cm
case CM: return 1;
default:
throw QException();
}
}
Value value;
};
在第6行检测到错误。
error: expected identifier before ',' token
IN,
^
如果我将变量的名称从IN更改为INCHES,则错误消失。
导致此错误的原因是什么?据我所知,IN不是C ++或Qt的关键字,为什么名称会导致问题?
您尚未指定包含的其他头文件,因此无法给出任何明确的答案。
但是,您可以执行一些操作来解决名称冲突:
IN
预处理器宏,你可以在你所有的#define IN whatever
s之后执行:#include
,看看你的编译器是否会生成描述其他地方定义的错误消息。-E
)。然后你可以检查它,看看有什么替代IN
,这可能会给你一个线索,它来自哪里。.cpp
或.cc
)中,你可以在你所有的#undef IN
s之后添加#include
来取消定义早期的实例,因为你可能不需要早期的定义。 (不要在头文件中这样做。这样做可能会引起未来的问题。)