Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内部枚举类型的构造函数参数的意图是什么?:使用C+的编程原理和实践代码+;_C++_Constructor_Enums_Member_Static Members - Fatal编程技术网

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
的构造函数时遇到问题。特别是带有参数type
Color\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};
}