Re: Error while writing State Design Pattern Code
In article
<2c1ee6ab-5e22-48e5-8a75-f6c6d438a841@w34g2000prm.googlegroups.com>,
Pallav singh <singh.pallav@gmail.com> wrote:
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
Results from compiling in: http://www.comeaucomputing.com/tryitout and
my own observations...
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include<iostream.h>
(From comeau)
<iostream.h> is not a Standard header, use <iostream> instead.
using namespace std;
class state;
class Machine
{
class state * current;
keyword 'class' unnecessary above.
public :
Machine();
void setcurrentstate(state * s)
{ current = s ; }
void on();
void off();
};
class state
{
public :
virtual void on(Machine * m)
{cout<< " Already On \n"; }
Above, and in general, your use of whitespace is inconsistent,
especially inside quotes.
virtual void off(Machine * m)
{cout<<"Already Off \n"; }
};
void Machine::on()
{ current->on(this); }
void Machine::off()
{ 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::off(Machine * m)
{
cout<<"Going from ON to OFF";
m->setcurrentstate( new OFF() );
delete this;
}
int main()
{
void (Machine::*ptrs[] )() = { Machine::off, Machine::on }; // ErrorPoint
(From comeau)
error: nonstandard form for taking the address of a member function
void (Machine::*ptrs[] )() = { Machine::off, Machine::on };
^
(From comeau)
error: nonstandard form for taking the address of a member function
void (Machine::*ptrs[] )() = { Machine::off, Machine::on };
^
Machine FSM;
int num;
while(1)
{ cout <<"Enter 0 / 1 : ";
cin >> num;
(FSM.*ptrs[num])();
}
return 0;
(From comeau)
warning: statement is unreachable
return 0;
^
}