2014-02-14 3 views
-1

Я новичок в C++, и я сделал класс заголовок (PID.h), который выглядит следующим образом:C++ - Использование перечисления объявленного внутри класса вызвать класс застройщик в

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 показывает направление, Mode и Reference в конструкторе класса, отмеченном ошибкой: «PID класса не имеет направления memeber» (то же самое для двух других).

В PID.cpp помечает имя конструктора в красном говоря

ошибка C2511: «PID :: PID (двойной, неподписанных Int, двойной, двойной, двойной, двойной, двойной, PID :: Направление , PID :: Mode, PID :: Reference) ': перегруженная функция-член не найдена в' PID '

Кто-нибудь знает, что происходит? Почему я не могу вызвать конструктор класса с объявлением enum внутри класса?

ответ

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 }; 
    ... 
+0

'Вы должны объявлять перечисления, прежде чем использовать them' _when, используемые за пределами члена function body_ –

+0

Хорошая точка, отредактирует –

+0

Это сработало! благодаря! Не могли бы вы просто уточнить, «когда используется вне тела функции-члена»? – mFeinstein

Смежные вопросы