1

在我的项目中,我有 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'
4

3 回答 3

1

在 C++中没有从intto的隐式转换,使用 an来存储您的标志。此外,您可以将枚举声明为,只有 C 需要。enumintenum FormatFlags{ /* values */ };typedef

于 2013-04-10T09:52:11.323 回答
0

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

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

于 2013-04-12T12:51:40.493 回答
0

代替

FormatFlags eFlags = (FormatFlags)0;

int eFlags = 0;

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

于 2013-04-10T09:50:13.220 回答