operator overloading question

ok, I will poost my code below. I get these two errors:
(54) : error C2601: '>>' : local function definitions are illegal
(54) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
These errors begin at the open bracket after this line:
ifstream & operator>> (ifstream& stream, employee& p)
I'm not sure what to do. Here is my code:

#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};
employee::employee();
int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);

ifstream & operator>> (ifstream& stream, employee& p)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   p.setfname(tmp);

   stream.getline(tmp, 80, '|');
   p.setlname(tmp);

   stream.getline(tmp, 80, '|');
   p.setaddress(tmp);

   stream.getline(tmp, 80, '|');
   p.setcity(tmp);

   stream.getline(tmp, 80, '|');
   p.setstate(tmp);

   stream.getline(tmp, 80, '|');
   p.setzip(tmp);

   stream.getline(tmp, 80, '|');
   p.sethos(tmp);

   stream.getline(tmp, 80, '|');
   p.setpayrate(tmp);

   stream.getline(tmp, 80, '|');
   p.sethours(tmp);

   stream.getline(tmp, 80, '|');
   p.setdependents(tmp);

  return stream;
}
  employee compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}
dukemarlonAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Karl Heinz KremerCommented:
Your operator is defined embedded in the main function. I have not comiled it, but this is definitely a problem. Also, the line employee::employee(); is wrong. The definition of your employee class is incomplete: All the methods that you reference in the operator are not defined. Try to correct these problems, and if it's still not working, post a comment.

Try this:

#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};



int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);
  employee compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}

ifstream & operator>> (ifstream& stream, employee& p)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   p.setfname(tmp);

   stream.getline(tmp, 80, '|');
   p.setlname(tmp);

   stream.getline(tmp, 80, '|');
   p.setaddress(tmp);

   stream.getline(tmp, 80, '|');
   p.setcity(tmp);

   stream.getline(tmp, 80, '|');
   p.setstate(tmp);

   stream.getline(tmp, 80, '|');
   p.setzip(tmp);

   stream.getline(tmp, 80, '|');
   p.sethos(tmp);

   stream.getline(tmp, 80, '|');
   p.setpayrate(tmp);

   stream.getline(tmp, 80, '|');
   p.sethours(tmp);

   stream.getline(tmp, 80, '|');
   p.setdependents(tmp);

  return stream;
}
0
Karl Heinz KremerCommented:
Your operator is defined embedded in the main function. I have not comiled it, but this is definitely a problem. Also, the line employee::employee(); is wrong. The definition of your employee class is incomplete: All the methods that you reference in the operator are not defined. Try to correct these problems, and if it's still not working, post a comment.

Try this:

#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};



int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);
  employee compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}

ifstream & operator>> (ifstream& stream, employee& p)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   p.setfname(tmp);

   stream.getline(tmp, 80, '|');
   p.setlname(tmp);

   stream.getline(tmp, 80, '|');
   p.setaddress(tmp);

   stream.getline(tmp, 80, '|');
   p.setcity(tmp);

   stream.getline(tmp, 80, '|');
   p.setstate(tmp);

   stream.getline(tmp, 80, '|');
   p.setzip(tmp);

   stream.getline(tmp, 80, '|');
   p.sethos(tmp);

   stream.getline(tmp, 80, '|');
   p.setpayrate(tmp);

   stream.getline(tmp, 80, '|');
   p.sethours(tmp);

   stream.getline(tmp, 80, '|');
   p.setdependents(tmp);

  return stream;
}
0
Karl Heinz KremerCommented:
Your operator is defined embedded in the main function. I have not comiled it, but this is definitely a problem. Also, the line employee::employee(); is wrong. The definition of your employee class is incomplete: All the methods that you reference in the operator are not defined. Try to correct these problems, and if it's still not working, post a comment.

Try this:

#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};



int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);
  employee compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}

ifstream & operator>> (ifstream& stream, employee& p)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   p.setfname(tmp);

   stream.getline(tmp, 80, '|');
   p.setlname(tmp);

   stream.getline(tmp, 80, '|');
   p.setaddress(tmp);

   stream.getline(tmp, 80, '|');
   p.setcity(tmp);

   stream.getline(tmp, 80, '|');
   p.setstate(tmp);

   stream.getline(tmp, 80, '|');
   p.setzip(tmp);

   stream.getline(tmp, 80, '|');
   p.sethos(tmp);

   stream.getline(tmp, 80, '|');
   p.setpayrate(tmp);

   stream.getline(tmp, 80, '|');
   p.sethours(tmp);

   stream.getline(tmp, 80, '|');
   p.setdependents(tmp);

  return stream;
}
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Karl Heinz KremerCommented:
Your operator is defined embedded in the main function. I have not comiled it, but this is definitely a problem. Also, the line employee::employee(); is wrong. The definition of your employee class is incomplete: All the methods that you reference in the operator are not defined. Try to correct these problems, and if it's still not working, post a comment.

Try this:

#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};



int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);
  employee compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}

ifstream & operator>> (ifstream& stream, employee& p)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   p.setfname(tmp);

   stream.getline(tmp, 80, '|');
   p.setlname(tmp);

   stream.getline(tmp, 80, '|');
   p.setaddress(tmp);

   stream.getline(tmp, 80, '|');
   p.setcity(tmp);

   stream.getline(tmp, 80, '|');
   p.setstate(tmp);

   stream.getline(tmp, 80, '|');
   p.setzip(tmp);

   stream.getline(tmp, 80, '|');
   p.sethos(tmp);

   stream.getline(tmp, 80, '|');
   p.setpayrate(tmp);

   stream.getline(tmp, 80, '|');
   p.sethours(tmp);

   stream.getline(tmp, 80, '|');
   p.setdependents(tmp);

  return stream;
}
0
Karl Heinz KremerCommented:
... so it did work :-) Sorry about that. My browser timed out three times, so I resubmitted the comment a number of times.
0
dukemarlonAuthor Commented:
it kinda fixed it, but now inside of the overloaded function, can't figure out how to set values to any of the objects, I was barraged with errors, and can't figure most of them out.
0
dukemarlonAuthor Commented:
here is what I have, but every object in the overloaded function says it is an illeagal reference




#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;

class employee
{
public:
  friend ifstream &operator>>(ifstream& stream, employee& p);
  string lname;
  string fname;
  string address;
  string city;
  string state;
  string zip;
  char hos;
  int payrate;
  int hours;
  int dependents;
  int gpay;
  int fed;
  int state1;
  int social;
  int net;
  int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
};
employee employee();







int main()
{
  char in[20];
  char out[20];
  char str[1024], last;
  cout<<"Enter the name of the file you want to write to."<<endl;
  cin.get(out, 20);
  cin.ignore(80, '\n');
  cout<<"Enter the name of the file you want to read from."<<endl;
  cin.get(in, 20);
  cin.ignore(80, '\n');
  ifstream infile;
  infile.open(in);
  ofstream outfile;
  outfile.open(out);

   

  employee::compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos);
  infile.close();
  outfile.close();
  return 0;
}

int compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos)
{
  if(hos=='h'||'H')gpay=hours*payrate*100;
  if(hos=='s'||'S')gpay=payrate/26*100;
  fed=(gpay*26)-(2500*dependents)*(.28/.26)*100;
  state1=gpay*.048*100;
  social=gpay*.075*100;
  return (gpay, fed, state1, social);
}





ifstream & operator>> (ifstream& stream, employee&)
{
   char tmp[80];
 
   stream.getline(tmp, 80, '|');
   employee::fname=tmp;

   stream.getline(tmp, 80, '|');
   employee::lname=tmp;

   stream.getline(tmp, 80, '|');
   employee::address=tmp;

   stream.getline(tmp, 80, '|');
   employee::city=tmp;

   stream.getline(tmp, 80, '|');
   employee::state=tmp;

   stream.getline(tmp, 80, '|');
   employee::zip=tmp;

   stream.getline(tmp, 80, '|');
   employee::hos=tmp;

   stream.getline(tmp, 80, '|');
   employee::payrate=tmp;

   stream.getline(tmp, 80, '|');
   employee::hours=tmp;

   stream.getline(tmp, 80, '|');
   employee::dependents=tmp;

  return stream;
}
0
Karl Heinz KremerCommented:
The function header of compute has to look like this:

int employee::compute(int payrate, int hours, int dependents, int gpay, int fed, int state1, int social, int net, char hos)
{
  if(hos=='h'||'H')gpay=hours*payrate*100;
  if(hos=='s'||'S')gpay=payrate/26*100;
  fed=(gpay*26)-(2500*dependents)*(.28/.26)*100;
  state1=gpay*.048*100;
  social=gpay*.075*100;
  return (gpay, fed, state1, social);
}

The header of the operator>> should look like this:

ifstream & operator>> (ifstream& stream, employee& e)

Then in the body of the method use e.variable_name instead of employee::variable_name. This syntax only works for static member variables.

Remove the line "employee employee();" right after the class declaration.

In main() define a variable of type employee:

employee myEmployee;

Then call the compute() method like this:
myEmployee.compute(...);

Also, you are not using your operator>>



0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.