C ++ - 在类contructor的调用中使用在类中声明的枚举

时间:2014-02-14 10:04:50

标签: c++ enums

我是C ++的新手,我创建了一个类头(PID.h),如下所示:

class PID
{
public:
    PID(double newSetpoint,
        double newOutputMax,
        PID::Direction newDirection,
        PID::Mode newMode,
        PID::Reference newReference);

    enum Direction { DIRECT = 0, REVERSE = 1 };
    enum Mode { MANUAL = 0, AUTOMATIC = 1 };    
    enum Reference { LINEAR = 0, CIRCULAR = 1 };  

    // class continues...
};

Visual Studio 2010在类构造函数中显示方向,模式和引用,标记为“类PID没有方向”的错误(其他两个相同)。

在PID.cpp中,它用红色标记构造函数名称

错误C2511:'PID :: PID(double,unsigned int,double,double,double,double,double,PID :: Direction,PID :: Mode,PID :: Reference)':重载成员函数在'PID'中找不到

有谁知道发生了什么?为什么我不能使用在类中声明的枚举来调用类的构造函数?

1 个答案:

答案 0 :(得分:5)

您需要在使用它们之前声明您的枚举(在成员函数体外使用时**):

class PID
{
public:

    enum Direction { DIRECT = 0, REVERSE = 1 };

    enum Mode { MANUAL = 0, AUTOMATIC = 1 };

    enum Reference { LINEAR = 0, CIRCULAR = 1 };  


    PID(double newSetpoint /*...lots of stuff more to initialize*/, double newOutputMax, Direction newDirection, Mode newMode, PID::Reference newReference);

    // class continues...

此外,在类范围内使用枚举时,您无需限定枚举。

**“在成员函数体外部使用时”表示以下内容有效:

class PID
{
public:
    void someMemberFunction() {
        Direction d = DIRECT;
        ...
    }

    enum Direction { DIRECT = 0, REVERSE = 1 };
    ...