我是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'中找不到
有谁知道发生了什么?为什么我不能使用在类中声明的枚举来调用类的构造函数?
答案 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 };
...