草庐IT

c++ - 未初始化的枚举变量值

我通过使用枚举声明新类型DAY,然后从它声明两个变量day1和day2,然后我应该看到0到6之间的值,当我使用它们时未初始化,因为值在enumlist中介于0到6之间,但是我收到这些值,而不是-858993460。你能解释一下为什么我收到这些值而不是0到6吗?#includeusingnamespacestd;intmain(){enumDAY{SAT,SUN,MON,TUE,WED,THU,FRI};DAYday1,day2;cout 最佳答案 枚举不限于仅采用声明的值。它有一个底层类型(一个数字类型,至少大到足以表示所有值),并

编译器无法正确识别 C++ 枚举

谁能解释为什么以下代码无法编译(在g++(GCC)3.2.320030502(RedHatLinux3.2.3-49)上)?structX{public:enumState{A,B,C};X(States){}};intmain(){X(X::A);}我得到的信息是:jjj.cpp:在函数'intmain()'中:jjj.cpp:10:'XX::A'不是'structX'的静态成员jjj.cpp:10:没有匹配函数来调用'X::X()'jjj.cpp:1:候选人是:X::X(constX&)jjj.cpp:5:X::X(X::State)`这是错误的代码还是编译器错误?问题由Neil+

c++ - Rust 位域和枚举 C++ 风格

我是一名来自C/C++的Rust初学者。首先,我尝试使用user32.MessageBox为MicrosoftWindows创建一个简单的“Hello-World”类程序。我偶然发现了与位域相关的问题。免责声明:所有代码片段都是在SO编辑器中编写的,可能包含错误。C中的消息框“Hello-World”调用函数的UTF-16LE版本所需的统一C声明是:enumMessageBoxResult{IDFAILED,IDOK,IDCANCEL,IDABORT,IDRETRY,IDIGNORE,IDYES,IDNO,IDTRYAGAIN=10,IDCONTINUE};enumMessageBox

c++ - 从其他类访问枚举值

在我的项目中,我在一个类中定义了一个枚举,它在整个类中使用。在重构期间,该枚举被移至另一个类。所以我只是简单地在我原来的类中typedef编辑它,就像这样:classA{public:enumE{e1,e2};};classB{public:typedefA::EE;};现在变量定义、返回值、函数参数等工作完美。只有当我想访问我的第二个类中的枚举值时,我仍然需要用周围类的名称来限定它们,例如Ee=A::e1;有没有办法避免这种情况,还是我必须将其复制到每次出现的枚举值中? 最佳答案 您将每个枚举放入一个嵌套类中,您可以在自己的类中使

c++ - 从类方法返回作用域枚举时命名空间混淆

我在C++中有以下代码:classPerson{public:enumGender{Male,Female};GenderGetGender()const;}我以这种方式将它包装在boost::python中:BOOST_PYTHON_MODULE(TestPython){scopethe_scope=class_("Person").def("GetGender",&Person::GetGender);enum_("Gender").value(Male,Person::Male).value(Female,Person::Female).export_values();}当我尝试

c++ - g++-4.4 中的强类型枚举

根据GCCC++11supportstatuswebsite,强类型枚举可用于g++4.4和更大。但是以下内容不能用g++4.4编译:enumclassFoo{value_1,value_2};intmain(){Fooa=Foo::value_1;Foob=Foo::value_2;constbooltest=(a错误信息是error:invalidoperandsoftypes‘Foo’and‘Foo’tobinary‘operator.接受代码的编译器包括g++-4.6,g++-4.7,g++-4.8和clang++3.2.(我无法使用g++-4.5进行测试,因为我目前没有安装它

c++ - 以通用方式选择有效的随机枚举值

假设我们有一个枚举类型E.enumclassE:underlying_type_of_E{v1=uE1,v2=uE2,//...vN=uEN};typedeftypenamestd::underlying_type::typeuE;一般来说,并不是uE的所有值是E的有效值,因为我们可以选择它们之间的关系。有没有一种通用的方法来创建随机的、有效的(在定义中命名,而不是可分配)的E值?例如,这是行不通的:std::mt19937m;std::uniform_int_distributionrandomUE(0,std::numeric_limits::max());Ee=static_ca

c++ - 使用声明引入的枚举

我试图理解用嵌套名称说明符定义的枚举。标准说的是N4296:7.2/4[dcl.enum]:Iftheenum-keyisfollowedbyanested-name-specifier,theenum-specifiershallrefertoanenumerationthatwaspreviouslydeclareddirectlyintheclassornamespacetowhichthenested-name-specifierrefers(i.e.,neitherinheritednorintroducedbyausing-declaration),andtheenum-s

c++ - 迭代方向枚举

我有一个方向枚举,其中包含6个方向条目(N、NE、SE、S、SW、NW),它们基本上是图中节点的边。我经常需要遍历所有邻居,目前仅使用int从0->5进行迭代。有时还需要从例如迭代2->1环绕,目前通过从2->2+5迭代并在使用时取模6来完成。有什么我可以做的,可以在不损失性能的情况下使它更安全/更容易使用吗?具有固定整数范围的for循环可以展开、内联等。基于vector的方法不能(在枚举中使用静态常量vector)我已经在这样的方案中有了枚举:structDirection{enumType{N,NE,...}unsignedCOUNT=...;Typet_;operatorType

c++ - 类型转换在存储受限的枚举中失败

SSCCE:enumclassconfirm{yes};structitem{confirms:4;//(1)limitingstoragesizerequired};intmain(){itemitm;itm.s=confirm::yes;//(2)OKswitch(itm.s){caseconfirm::yes://(3)Failure,needstaticdatacasthere?break;}}产生错误:Infunction‘intmain()’:error:couldnotconvert‘yes’from‘confirm’to‘int’caseconfirm::yes:^虽然