クラスのステート マシンの実装に問題があります。エラーが発生し続けます:
state.cpp:5: error: have0 was not declared in this scope
state.cpp:10: error: redefinition of State* Have0State::process(std::string)
state.h:18: error: virtual State* Have0State::process(std::string) previously defined here
マシンの残りの部分に進む前に、Have0State を機能させようとしているため、スパース コードです。
状態.h:
#ifndef STATE_H
#define STATE_H
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <iostream>
class State{
public:
State(){};
virtual State* process(std::string input) = 0;
};
class Have0State: public State {
public:
Have0State():State(){};
virtual State* process(std::string input);
}have0;
#endif
状態.cpp:
#include "state.h"
using namespace std;
State *currentState = &have0;
State* Have0State::process(string input){
if(input == "quarter"){
cout << "cool" << endl;
}
return &have0;
}
int main(int argc, char** argv) {
string input;
//get input
cin >> input;
while (input != "exit") {
currentState = currentState->process(input);
//get input
cin >> input;
}
return 0;
};
プロセス関数を次のように定義しようとしましHave0State::State::process(string input)
たが、それも機能しませんでした。特にサブクラスメンバー関数のコンテキストで、関数ポインターがどのように機能するかについての説明があれば、大いに感謝します。
EDIT:また、state.hファイルhave0
のクラス宣言の最後の宣言は正確には何ですか? Have0State
明示的に指定された型はありません。タイプ Have0State であることが暗示されていますか??