在我的项目中,我有simple_xxxx.c,它不是系统线程安全版本,因此创建一个系统线程等效,我创建了sys_xxxx.cpp;在名为MyNameSpace的命名空间内捕获整个C代码的位置。在文件中我不包括simple_xxxx.h来冒险混淆编译,但包含sys_xxxx.h来获取我的.cpp文件的声明。在这样做时,我得到以下枚举的编译错误,这对于int来说很困惑,甚至认为它是在命名空间内声明的。
欢迎任何建议。
// xxxx.h
namespace MyNameSpace {
typedef enum {
FormatFlags_LeftAlign = (1 << 0), // 1
FormatFlags_SignPrefix = (1 << 1), // 2
FormatFlags_SpacePrefix = (1 << 2), // 4
FormatFlags_ZeroPad = (1 << 3), // 8
FormatFlags_Format = (1 << 4) // 16
} FormatFlags;
bool string_AppendFormatted(UnicodeString_s*, UnicodeString_s*, void*);
}
///xxxx.cpp
namespace MyNameSpace {
bool string_AppendFormatted(UnicodeString_s*, UnicodeString_s*, void*)
{
FormatFlags eFlags = (FormatFlags)0;
case '-':
4086: eFlags |= FormatFlags_LeftAlign;
break;
case '+':
4089: eFlags |= FormatFlags_SignPrefix;
break;
case '0':
4092: eFlags |= FormatFlags_ZeroPad;
break;
} // method
} // namespace
xxxx.cpp: In function 'bool MyNameSpace::string_AppendFormatted(MyNameSpace::UnicodeString_s*, MyNameSpace::UnicodeString_s*, void*)':
xxxx.cpp:4086: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags'
xxxx.cpp:4089: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags'
xxxx.cpp:4092: error: invalid conversion from 'int' to 'MyNameSpace::FormatFlags'
答案 0 :(得分:1)
在C ++中没有从int
到enum
的隐式转换,使用int
来存储您的标志。此外,您可以将枚举声明为enum FormatFlags{ /* values */ };
,只有C才需要typedef
。
答案 1 :(得分:0)
替换
FormatFlags eFlags = (FormatFlags)0;
与
int eFlags = 0;
正如错误消息所示,您无法将枚举的组合(int
)强制转换回枚举(请注意,这些组合的值未在枚举定义中定义)。
答案 2 :(得分:0)
执行以下操作可以让我解决问题。 eFlags =(FormatFlags)(eFlags | FormatFlags_LeftAlign);
如果我将枚举类型声明为int;它会导致我的代码进一步出现问题(此处未显示)。