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
怎么样。这种方法简单,不易出错。。。。或者不同的类/结构。如何使用不同的命名空间?如果要在同一个结构中声明它们,则不能这样做。