我在使用函數指針實現有限狀態機時遇到了問題。我不斷收到錯誤:有限狀態機中的函數指針
b.cpp: In function ‘int main()’:
b.cpp:51: error: ‘have0’ was not declared in this scope
我試圖在第51行添加&到對此商品有0,但沒有做任何事情。我一直在閱讀函數指針一個小時,但仍然無法編譯它。我覺得我對函數指針的理解非常好,但很顯然,我在這裏錯過了一些東西。我所有的功能都是空白的,因爲我只是想立即編譯它們,它們最終將充滿邏輯來移動通過有限狀態機。任何幫助表示讚賞。這裏是我的b.cpp代碼:
#include <iostream>
#include <string>
#include "b.h"
using namespace std;
typedef void (*state)(string);
state current_state;
void b::have0(string input)
{
if(input == "quarter"){
}
}
void b::have25(string input)
{
}
void b::have50(string input)
{
}
void b::have75(string input)
{
}
void b::have100(string input)
{
}
void b::have125(string input)
{
}
void b::have150(string input)
{
}
void b::owe50(string input)
{
}
void b::owe25(string input)
{
}
int main()
{
string inputString;
// Initial state.
cout <<"Deposit Coin: ";
cin >> inputString;
cout << "You put in a "+inputString+"." << endl;
current_state = have0;
// Receive event, dispatch it, repeat
while(1)
{
if(inputString == "exit")
{
exit(0);
}
// Pass input to function using Global Function Pointer
(*current_state)(inputString);
cout <<"Deposit Coin: ";
cin >> inputString;
cout << "You put in a "+inputString+"." << endl;
}
return 0;
}
和我的BH:
#ifndef B_H
#define B_H
#include <string>
class b{
public:
void have0(std::string);
void have25(std::string);
void have50(std::string);
void have75(std::string);
void have100(std::string);
void have125(std::string);
void have150(std::string);
void have175(std::string);
void have200(std::string);
void have225(std::string);
void owe125(std::string);
void owe100(std::string);
void owe75(std::string);
void owe50(std::string);
void owe25(std::string);
};
#endif
我在'b.cpp'中看不到'have0'的聲明。我同意編譯器。 – 2013-02-16 06:22:22
我沒有原型聲明'void have0(std :: string);'? – midma101 2013-02-16 06:24:48
是的,但我認爲你需要方法體聲明。原型沒有*地址*。 – 2013-02-16 06:26:00