C++ 结构中的枚举

C++ 结构中的枚举,c++,qt,struct,enums,C++,Qt,Struct,Enums,我的问题并不难,但我在网上找不到一个合适的答案 我定义了一个.h文件,其中包含一个结构并声明了一些枚举。我想在另一个.cpp文件中使用该结构。但是编译返回错误 这是我的代码variablestuct.h文件: struct variableSupervision { std::string Donnees; enum TYPE { ENUM, INT, FLOAT, BOOL }; enum UNITE

我的问题并不难,但我在网上找不到一个合适的答案

我定义了一个
.h文件
,其中包含一个结构并声明了一些枚举。我想在另一个
.cpp文件中使用该结构。但是编译返回错误

这是我的代码variablestuct.h文件

struct variableSupervision {
    std::string Donnees;

    enum TYPE
    {
      ENUM,
      INT,
      FLOAT,
      BOOL
    };

    enum UNITE
    {
      ETAT,
      A,
      V,
      TBC,
      DEGREEE
    };

    enum IN
    {
      SYSTEMMONITOR,
      MODEMANAGEMENT
    };

    enum OUT
    {
      SLIDECONTROL,
      MODEMANAGEMENT,
      HMICONTROL,
      MOTORCONTROL
    };


    enum GET {X};

    std::string Commentaire ;
};

错误是:
重新声明MODEMANAGEMENT
。我不明白为什么,因为它们在两个不同的枚举中。我应该为每个枚举创建不同的单独文件吗?

由于C++11,您可以使用
enum class
而不是
enum
来解决此问题

如果由于某种原因无法使用C++11,则应在值前面加上如下前缀:

enum IN
{
  IN_SYSTEMMONITOR,
  IN_MODEMANAGEMENT
};

enum OUT
{
  OUT_SLIDECONTROL,
  OUT_MODEMANAGEMENT,
  OUT_HMICONTROL,
  OUT_MOTORCONTROL
};

或者它们不能放在同一个结构中,因此必须将声明移动到不同的名称空间。(编辑:或不同的类/结构,如下所述。)

此use C++11解决方案的可能重复项将不起作用,因为我没有使用此类型编译器,因此不存在重复项。将枚举放在不同的文件中不会有帮助。。。它们需要位于不同的名称空间或类中,以避免标识符冲突。您可以在{public:enum enum{X,Y};在(enum e):e_Ue{}操作符enum()const{return e_Ue;}中创建例如
等。然后明确地参考::X中的
。另外,最好避免使用多字母全大写标识符-它们传统上只由预处理器使用,如果与预处理器发生冲突,它们可能会非常混乱,并且会加重调试的难度。谢谢,对于一个变量来说,这看起来真的很复杂,有没有办法在.h文件中访问它而不创建类?将其重命名为
MODEMANAGEMENT\u OUT
MODEMANAGEMENT\u in
怎么样。这种方法简单,不易出错。。。。或者不同的类/结构。如何使用不同的命名空间?如果要在同一个结构中声明它们,则不能这样做。