使用EnUM的C++级交通灯? 我有一个交通灯C++类,我对使用EnUM进行颜色管理有一些疑问, 特别是关于要使用的正确语法。 下面我编写了简化的代码片段,因为我的目的只是了解它是如何工作的: class TrafficLight { private: // ... enum class color{ GREEN, RED, YELLOW }; // ... public: TrafficLight(/* Want to pass the color here in the constructor */) { if(/* Color passed as argument is RED */) // do something... {} else // do something else... {} } };

使用EnUM的C++级交通灯? 我有一个交通灯C++类,我对使用EnUM进行颜色管理有一些疑问, 特别是关于要使用的正确语法。 下面我编写了简化的代码片段,因为我的目的只是了解它是如何工作的: class TrafficLight { private: // ... enum class color{ GREEN, RED, YELLOW }; // ... public: TrafficLight(/* Want to pass the color here in the constructor */) { if(/* Color passed as argument is RED */) // do something... {} else // do something else... {} } };,c++,enums,C++,Enums,OtherClass:此类创建具有指定颜色的TrafficLight对象: class OtherClass { public: //... void createTrafficLight() { TrafficLight traffic_light(/* Color */); } //... }; TrafficLIght和OtherClass不在同一文件中 我不确定将红绿灯颜色作为参数传递的语法是什么颜色可以像任何其他类型一样使用,其

OtherClass:此类创建具有指定颜色的TrafficLight对象:

class OtherClass
{
public:
    //...
    void createTrafficLight()
    {
        TrafficLight traffic_light(/* Color */);
    }
    //...
};
TrafficLIght和OtherClass不在同一文件中

我不确定将红绿灯颜色作为参数传递的语法是什么

颜色可以像任何其他类型一样使用,其枚举数可以像类的静态成员一样访问:

    TrafficLight(color col)
    {
        if(col == color::RED)
            // do something...

    //...
但是,如果类外的代码应该能够访问枚举类及其枚举数,则需要将枚举类的颜色设置为公共的。

颜色可以像任何其他类型一样使用,并且可以像访问类的静态成员一样访问枚举数:

    TrafficLight(color col)
    {
        if(col == color::RED)
            // do something...

    //...

如果类外的代码应该能够访问枚举类及其枚举数,则需要将枚举类的颜色设置为公共的。

首先需要将枚举设置为公共的,然后在定义其他类的文件中包含trafficLight类的.h

代码可以是以下代码:

class TrafficLight
{
private:

public:

    // ...
    enum class color{
        GREEN,
        RED,
        YELLOW
    };
    // ...

    TrafficLight(color col)
    {
        if(col == color::RED)
            // do something...
        {}
        else
            // do something else...
        {}
    }
}; 
另一个类需要包含.h,其中定义了TrafficLight类

class OtherClass
{
public:
    //...
    void createTrafficLight()
    {
        TrafficLight traffic_light(TrafficLight::color::RED);
    }
    //...
};

您首先需要将枚举公开,然后在定义OtherClass的文件中包含trafficLight类的.h

代码可以是以下代码:

class TrafficLight
{
private:

public:

    // ...
    enum class color{
        GREEN,
        RED,
        YELLOW
    };
    // ...

    TrafficLight(color col)
    {
        if(col == color::RED)
            // do something...
        {}
        else
            // do something else...
        {}
    }
}; 
另一个类需要包含.h,其中定义了TrafficLight类

class OtherClass
{
public:
    //...
    void createTrafficLight()
    {
        TrafficLight traffic_light(TrafficLight::color::RED);
    }
    //...
};

嗨,James,因为您的枚举是私有的,所以在调用TrafficLight类的构造函数时,您将无法从外部访问它。您需要将其公开或使用访问器。1个C++访问修饰符:。2 C++包括:@ GeorgeNewton请在适当的地方写你的答案,而不是注释部分。谢谢@Lightness Races Swithmonica tbh这似乎不是一个非常全面的答案。。所以我觉得一个评论就足够了,但你是对的。我刚注意到你把它列为你最讨厌的东西之一。。不会再发生了:P@GeorgeNewton:P如果你没有时间写更长的答案,那很好,不要,但这并不能神奇地让联合国同行评议的评论部分位于正确的位置:嗨,詹姆斯,由于你的枚举是私有的,当你调用TrafficLight类的构造函数时,你将无法从外部访问它。您需要将其公开或使用访问器。1个C++访问修饰符:。2 C++包括:@ GeorgeNewton请在适当的地方写你的答案,而不是注释部分。谢谢@Lightness Races Swithmonica tbh这似乎不是一个非常全面的答案。。所以我觉得一个评论就足够了,但你是对的。我刚注意到你把它列为你最讨厌的东西之一。。不会再发生了:P@GeorgeNewton:P如果你没有时间写更长的答案,那没关系,但这并不能神奇地让联合国同行评议部分成为正确的地方: