brumm
05-04-2002, 13:51
An alle C++ Päpste
Möchte einen Automaten implementieren der über ein Feld von member functions angesprochen wird. Mit der Fehlermeldung des g++ komm' ich nicht klar und die Zunahme der grauen Haare wächst mittlerweile logarithmisch;-)
Hier ein Beispiel:
//Test finite state machine with member functions
#include <iostream.h>
class A
{
public:
enum STATE_E {OFF, MEDIUM, FULL, LAST}; //Zustandsnamen
A();
~A() {};
STATE_E state; //Enthält den augenblicklichen Zustand
void runAutomat();
private:
typedef void (A::*func_n)();
func_n array[LAST];
void func_OFF();
void func_MEDIUM();
void func_FULL();
};
A::A()
{
state = OFF;
array[OFF] = &A::func_OFF;
array[MEDIUM] = &A::func_MEDIUM;
array[FULL] = &A::func_FULL;
}
void A::func_OFF()
{
cout << "func_OFF" << endl;
state = MEDIUM;
}
void A::func_MEDIUM()
{
cout << "func_MEDIUM" << endl;
state = FULL;
}
void A::func_FULL()
{
cout << "func_FULL" << endl;
state = LAST;
}
void A::runAutomat()
{
A::array[state](); //!!! Error !!!!
}
int main()
{
A a;
do {a.runAutomat();}while(a.state != A::LAST);
return 0;
}
Vermute einen Syntaxfehler und werde auch aus der Literatur nicht schlau!
Hat da einer ne Idee??? Für brauchbare Ratschläge schon mal vielen Dank im Voraus.
By
brumm
Möchte einen Automaten implementieren der über ein Feld von member functions angesprochen wird. Mit der Fehlermeldung des g++ komm' ich nicht klar und die Zunahme der grauen Haare wächst mittlerweile logarithmisch;-)
Hier ein Beispiel:
//Test finite state machine with member functions
#include <iostream.h>
class A
{
public:
enum STATE_E {OFF, MEDIUM, FULL, LAST}; //Zustandsnamen
A();
~A() {};
STATE_E state; //Enthält den augenblicklichen Zustand
void runAutomat();
private:
typedef void (A::*func_n)();
func_n array[LAST];
void func_OFF();
void func_MEDIUM();
void func_FULL();
};
A::A()
{
state = OFF;
array[OFF] = &A::func_OFF;
array[MEDIUM] = &A::func_MEDIUM;
array[FULL] = &A::func_FULL;
}
void A::func_OFF()
{
cout << "func_OFF" << endl;
state = MEDIUM;
}
void A::func_MEDIUM()
{
cout << "func_MEDIUM" << endl;
state = FULL;
}
void A::func_FULL()
{
cout << "func_FULL" << endl;
state = LAST;
}
void A::runAutomat()
{
A::array[state](); //!!! Error !!!!
}
int main()
{
A a;
do {a.runAutomat();}while(a.state != A::LAST);
return 0;
}
Vermute einen Syntaxfehler und werde auch aus der Literatur nicht schlau!
Hat da einer ne Idee??? Für brauchbare Ratschläge schon mal vielen Dank im Voraus.
By
brumm