什么是内部枚举类型的构造函数参数的意图?:使用C++的编程原理和实践中的代码
我在使用下面的Struct
的构造函数时遇到问题。特别是那些参数类型为Color_type
的。什么是内部枚举类型的构造函数参数的意图?:使用C++的编程原理和实践中的代码
这是我的理解是,因为enum
Color_type
是struct
Color
提供看似东西,可以像Color::Color_type::red
访问中定义,但是当我调用构造函数这样的值,例如这不起作用,Color p{Color::Color_type::red};
我对enum
在struct
范围内的意图感到困惑,并为构造函数提供了这种类型的参数。构造这个对象的人将如何访问这些类型定义?
会更好的解决方案是使用范围的enum class
外struct
的名为相同,使得其提供的方式拨打像Color p{Color::Color_type::red};
构造同样的问题延伸到enum Transparency
为好。
这是由Bjarne Stroustrup的在他的书中,规划原理与实践提供了grapics库使用C++ 2E
struct Color {
enum Color_type {
red=FL_RED, blue=FL_BLUE, green=FL_GREEN,
yellow=FL_YELLOW, white=FL_WHITE, black=FL_BLACK,
magenta=FL_MAGENTA, cyan=FL_CYAN, dark_red=FL_DARK_RED,
dark_green=FL_DARK_GREEN, dark_yellow=FL_DARK_YELLOW, dark_blue=FL_DARK_BLUE,
dark_magenta=FL_DARK_MAGENTA, dark_cyan=FL_DARK_CYAN
};
enum Transparency { invisible = 0, visible=255 };
Color(Color_type cc) :c(Fl_Color(cc)), v(visible) { }
Color(Color_type cc, Transparency vv) :c(Fl_Color(cc)), v(vv) { }
Color(int cc) :c(Fl_Color(cc)), v(visible) { }
Color(Transparency vv) :c(Fl_Color()), v(vv) { }
int as_int() const { return c; }
char visibility() const { return v; }
void set_visibility(Transparency vv) { v=vv; }
private:
unsigned char v; // 0 or 1 for now
Fl_Color c;
};
的SNIPPIT的帮助,从这个Comment我能够进一步测试后发现, Color test{Color::red};
确实编译。
我收到的直接错误来自在类定义中使用using
声明来继承基类的构造函数。
该类的成员之一是Color
类型,它抱怨使用由于格式不正确定义而被隐式删除的构造函数。
它不合格,因为Color::Color_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_lib::Color::Color_type::red};
你可以用'颜色:: red',而不是'颜色:: Color_type :: red'。 –