Error while writing State Design Pattern Code

P

Pallav singh

Hi All

i am getting Error while writing following code for state design
Pattern
kindly let me know How to Correct this Error ??

Thanks
Pallav Singh

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include<iostream.h>
using namespace std;

class state;

class Machine
{
class state * current;
public :
Machine();

void setcurrentstate(state * s)
{ current = s ; }

void on();
void off();
};

class state
{
public :
virtual void on(Machine * m)
{cout<< " Already On \n"; }

virtual void off(Machine * m)
{cout<<"Already Off \n"; }
};

void Machine::eek:n()
{ current->on(this); }

void Machine::eek:ff()
{ current->off(this); }

class ON : public state
{
public :
ON() {cout<<"Destructor invoked \n ";}
~ON() {cout<<"Constructor invoked \n ";}
void off(Machine * m);
};

class OFF : public state
{
public :
OFF() {cout<<"Destructor invoked \n ";}
~OFF() {cout<<"Constructor invoked \n ";}
void on(Machine * m)
{cout<<"Going from OFF to ON";
m->setcurrentstate( new ON() );
delete this;
}
};



Machine::Machine()
{
current = new OFF();
cout<<"Machine constructor Called "<<endl;
}


void ON::eek:ff(Machine * m)
{
cout<<"Going from ON to OFF";
m->setcurrentstate( new OFF() );
delete this;
}




int main()
{

void (Machine::*ptrs[] )() = { Machine::eek:ff, Machine::eek:n }; // Error
Point
Machine FSM;
int num;
while(1)
{ cout <<"Enter 0 / 1 : ";
cin >> num;
(FSM.*ptrs[num])();
}

return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
E

Eric Pruneau

Pallav singh said:
Hi All

i am getting Error while writing following code for state design
Pattern
kindly let me know How to Correct this Error ??

Thanks
Pallav Singh

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include<iostream.h>
using namespace std;

class state;

class Machine
{
class state * current;
public :
Machine();

void setcurrentstate(state * s)
{ current = s ; }

void on();
void off();
};

class state
{
public :
virtual void on(Machine * m)
{cout<< " Already On \n"; }

virtual void off(Machine * m)
{cout<<"Already Off \n"; }
};

void Machine::eek:n()
{ current->on(this); }

void Machine::eek:ff()
{ current->off(this); }

class ON : public state
{
public :
ON() {cout<<"Destructor invoked \n ";}
~ON() {cout<<"Constructor invoked \n ";}
void off(Machine * m);
};

class OFF : public state
{
public :
OFF() {cout<<"Destructor invoked \n ";}
~OFF() {cout<<"Constructor invoked \n ";}
void on(Machine * m)
{cout<<"Going from OFF to ON";
m->setcurrentstate( new ON() );
delete this;
}
};



Machine::Machine()
{
current = new OFF();
cout<<"Machine constructor Called "<<endl;
}


void ON::eek:ff(Machine * m)
{
cout<<"Going from ON to OFF";
m->setcurrentstate( new OFF() );
delete this;
}




int main()
{

void (Machine::*ptrs[] )() = { Machine::eek:ff, Machine::eek:n }; // Error
Point
Machine FSM;
int num;
while(1)
{ cout <<"Enter 0 / 1 : ";
cin >> num;
(FSM.*ptrs[num])();
}

return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Well I don't get any errors while compiling it with intel c++ compiler...
Except that I changed :

void (Machine::*ptrs[] )() = { Machine::eek:ff, Machine::eek:n }; // Error
Point

for

void (Machine::*ptrs[] )() = { Machine::eek:ff, Machine::eek:n }; // Error Point

I guess it is a typo error...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top