状态模式c ++ - 我做错了什么?

时间:2015-04-21 09:32:17

标签: c++ header include declaration forward

我不知道我在这里做错了什么。 目标是一个有限状态机,它根据它得到的字符改变状态及其行为,但我甚至无法得到项目结构......这是我到目前为止的代码,它不会恭维,对不起我没有错误代码,但是在Automat的构造函数中有一个是definatley,我试图将currentState设置为initial。

#ifndef Automat_H_
#define Automat_H_

class State;

class Automat {

public:

    Automat();
    virtual ~Automat();
    void setCurrentState(State* newCurrentState);
    void read(char c);

private:
    State* currentState;

};

#endif /* Automat_H_ */


#ifndef STATE_H_
#define STATE_H_

class Automat;

class State {
    virtual ~State();
    virtual void read(char c, Automat* m) = 0;
};

#endif /* STATE_H_ */

#ifndef INITIAL_H_
#define INITIAL_H_

#include "State.h"

class Initial: public State{
    virtual ~Initial();

    void read(char c, Automat* m);
};



#endif /* INITIAL_H_ */


//Automat.cpp

#include "../includes/Automat.h"

Automat::Automat() {
    currentState = new Initial();
}

Automat::~Automat() {
    // TODO Auto-generated destructor stub
}

void Automat::read(char c){
    //currentState->read(c, this);
}

1 个答案:

答案 0 :(得分:1)

据推测,丢失的错误消息告诉您究竟出了什么问题。我的编译器会出现像

这样的错误
prog.cpp:29:13: error: 'virtual State::~State()' is private

因为StateInitial的所有成员都是私有的 - 如果您使用class关键字引入类定义,那么这是默认设置。

public:添加到这些类定义中,或将关键字更改为struct

您还需要在"Initial.h"中加入"Automat.cpp",因为它需要该类的完整定义。