C++ 内部枚举类型的构造函数参数的意图是什么?:使用C+的编程原理和实践代码+;
我在使用下面的C++ 内部枚举类型的构造函数参数的意图是什么?:使用C+的编程原理和实践代码+;,c++,constructor,enums,member,static-members,C++,Constructor,Enums,Member,Static Members,我在使用下面的Struct的构造函数时遇到问题。特别是带有参数typeColor\u type的 我的理解是,由于enumColor\u type是在structColor中定义的,提供了一些似乎可以访问的内容,如Color::Color\u type::red,但当我用这样的值调用构造函数时,这不起作用,例如Color p>{Color::Color\u type::red}; 我对在struct中使用此enum并向构造函数提供此类型的参数的意图感到困惑。构造此对象的人如何访问这些类型定义 更
Struct
的构造函数时遇到问题。特别是带有参数typeColor\u type
的
我的理解是,由于enum
Color\u type
是在struct
Color
中定义的,提供了一些似乎可以访问的内容,如Color::Color\u type::red
,但当我用这样的值调用构造函数时,这不起作用,例如Color p>{Color::Color\u type::red};
我对在struct
中使用此enum
并向构造函数提供此类型的参数的意图感到困惑。构造此对象的人如何访问这些类型定义
更好的解决方案是在名为相同的struct
之外使用作用域enum类
,这样它就提供了调用构造函数的方法,如Color p{Color::Color\u type::red};
同样的问题也延伸到了枚举透明度
这是Bjarne Stroustrup在他的书《编程原理与实践》中使用C++ 2E
的一个小节。 在这方面的帮助下,我能够进一步测试并发现colortest{Color::red};
确实可以编译
我收到的直接错误是在类定义中使用使用声明来继承基类的构造函数
该类的一个成员是Color
类型的,它抱怨使用了一个构造函数,该构造函数由于定义格式错误而被隐式删除
它的格式不正确,因为Color::Color\u type
没有在我定义的类的范围内定义。一旦我用包含的命名空间完全限定了类型,我就能够编译了
namespace
{
struct Color { // Same as before}
struct Striped_rectangle : Rectangle // details ommitted for Rectangle
{
using Rectangle::Rectangle;
// details ommited
private:
Color stc{Color::Color_type::red};
}
将编译Striped_rectangle
中成员stc
的以下两个初始化:Color stc{Graph_lib::Color::red};
和
Color stc{Graph\u lib::Color::Color\u type::red};
您可以使用Color::red
而不是Color::Color\u type::red
。
namespace
{
struct Color { // Same as before}
struct Striped_rectangle : Rectangle // details ommitted for Rectangle
{
using Rectangle::Rectangle;
// details ommited
private:
Color stc{Color::Color_type::red};
}