什么是内部枚举类型的构造函数参数的意图?:使用C++的编程原理和实践中的代码

问题描述:

我在使用下面的Struct的构造函数时遇到问题。特别是那些参数类型为Color_type的。什么是内部枚举类型的构造函数参数的意图?:使用C++的编程原理和实践中的代码

这是我的理解是,因为enumColor_typestructColor提供看似东西,可以像Color::Color_type::red访问中定义,但是当我调用构造函数这样的值,例如这不起作用,Color p{Color::Color_type::red};

我对enumstruct范围内的意图感到困惑,并为构造函数提供了这种类型的参数。构造这个对象的人将如何访问这些类型定义?

会更好的解决方案是使用范围的enum classstruct的名为相同,使得其提供的方式拨打像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; 
}; 
+3

你可以用'颜色:: red',而不是'颜色:: Color_type :: red'。 –

的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};