C++ 命名空间中的数据类型转换无效

C++ 命名空间中的数据类型转换无效,c++,types,namespaces,C++,Types,Namespaces,在我的项目中,我有simple_xxxx.c,它不是系统线程安全版本,因此为了创建系统线程等价物,我创建了sys_xxxx.cpp;其中,整个C代码被捕获到名为MyNameSpace的命名空间中。在该文件中,我没有包括simple_xxxx.h以避免编译时出现混淆,但包含sys_xxxx.h是为了获得我的.cpp文件的声明。这样做的时候,我得到了下面枚举的编译错误,它被int弄糊涂了,甚至认为它是在名称空间内声明的 欢迎对此提出任何建议 // xxxx.h namespace MyNameSp

在我的项目中,我有simple_xxxx.c,它不是系统线程安全版本,因此为了创建系统线程等价物,我创建了sys_xxxx.cpp;其中,整个C代码被捕获到名为MyNameSpace的命名空间中。在该文件中,我没有包括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'
//xxxx.h
名称空间MyNameSpace{
类型定义枚举{
FormatFlags_LeftAlign=(1Replace

FormatFlags eFlags = (FormatFlags)0;

正如错误消息所说,您无法将枚举的组合(即
int
)强制转换回枚举(请注意,这些组合的值未在枚举定义中定义)。

替换

FormatFlags eFlags = (FormatFlags)0;


正如错误消息所说,您不能将枚举的组合(即
int
)强制转换回枚举(请注意,这些组合的值未在枚举定义中定义)

< P> > C++中,不存在从<代码> int <代码>到<代码> EnUM <代码>的隐式转换,使用<代码> int >代码>存储您的标志。也可以声明EnUM为<代码>枚举格式文件{/*值*/}。, TyPulf只适用于C.< /P> < P> > C++中没有从 int >代码>到EnUM/COD>的隐式转换,使用<代码> int >代码>存储您的标志。;
,只有C才需要
typedef

执行以下操作可以解决问题。 eFlags=(FormatFlags)(eFlags | FormatFlags_LeftAlign)


如果将枚举类型声明为int,则会导致下面的代码出现进一步问题(此处未显示)。

执行以下操作可以解决此问题。 eFlags=(FormatFlags)(eFlags | FormatFlags_LeftAlign)


如果我将枚举类型声明为int,则会对下面的代码造成进一步的问题(此处未显示)。

刚刚了解了CPP枚举处理;这与C的处理方式略有不同。总之,我的编译错误消失了,我很高兴。感谢您的回答。eFlags |=FormatFlags_LeftAlign;替换为eFlags=(FormatFlags)(eFlags | FormatFlags_LeftAlign);刚刚了解了CPP枚举处理;这与C的处理方式略有不同。无论如何,我的编译错误消失了,我很高兴。感谢您的回答。eFlags |=FormatFlags_LeftAlign;替换为eFlags=(FormatFlags)(eFlags | FormatFlags_LeftAlign);将FormatFlags转换为int会导致向函数提供eFlags的其他语句抛出错误。这是我对此问题的修复方法。无论如何,感谢您的回答。eFlags=(FormatFlags)(eFlags | FormatFlags_LeftAlign)但这取决于你,我对其他代码没有任何可见性……当计时器允许你这样做时,考虑接受另一个答案,因为它符合你的需要。将FrATATFLAGS转换成int导致其他的EFLAGS被提供给函数的语句是投掷错误。这是我的问题解决方法。无论如何,谢谢你的回答。EFLAGIS= =(FaltFLAGS)(EFLAGS,FULTAGATRAWFLADSLIFTALLIGN);这取决于您,我对代码的其余部分没有可见性……当计时器让您这样做时,考虑接受另一个答案,因为它符合您的需要。