DFA simulation in c++

My program tries to simulate a DFA in c++. This DFA has two alphabets (0, 1) and different states and tries to parse a string as input.
When I compile the code in visual c++(2008) I get an error as follows:
1>Compiling...
1>ex3.cpp
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\istream(846) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_istream<_Elem,_Traits>::basic_istream(const std::basic_istream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]



I am unable to rectify it. Help me out.

#include<iostream>
#include<string>
#include<map>
#include<set>
#include<utility>
#include<sstream>

using namespace std;

struct DFA {
map<pair<int, char>, int> transitions;
int startState;
set<int> finalStates;
};

void LoadDFA(DFA& d) {
cout << "Enter the start state: ";
cin >> d.startState;
cout << "Enter transition table.................." << endl;
while(true) {
int s_state, r_state;
char label;
string single_transition;
stringstream s;
cout << "Enter state(in integers) and transition labels(differentiate with space and enter 0 to teminate)\n: " ;
getline(cin, single_transition);
if(single_transition.size() == 0) break;
s << single_transition;
d.transitions.insert(make_pair(make_pair((s >> s_state), (s >> label)), (s >> r_state)));
}
cout << "Enter final states differentiated by spaces: ";
string final;
getline(cin, final);
int f_state;
stringstream final_states;
while(final_states >> f_state)
d.finalStates.insert(f_state);
}



bool SimulateDFA(DFA& d, string input) {
int currentState = d.startState;
for(string::iterator itr = input.begin(); itr != input.end(); ++itr)
currentState = d.transitions[make_pair(currentState, *itr)];
return (d.finalStates.find(currentState) != d.finalStates.end());
}

int main() {
DFA d;
LoadDFA(d);
cout << "Enter string to be parsed: ";
string inputString;
SimulateDFA(d, inputString);

return 0;
}
Topic archived. No new replies allowed.