Link to home
Start Free TrialLog in
Avatar of bananaamy
bananaamy

asked on

Assigning a value to a variable

I posted a question earlier that ask what I was doing wrong in my programming. In short, several experts explained to me that I  can't name a function and a variable with the same syntax. Okay, I changed that. However, I am still not recieving the correct value. (This time I only posted fraction of the code that I have been experimenting with -if you need to see it all to understand pls advise)
Problem:
I have a funtion that is solving for a value. Then another funtion that calls that value to display it.  Why does it not display it? I tried to assign a value of  0 to the variable but that doesnt work. What should I be doing?

void Wages::netPay()                ///This my function that  calculates     do I need to aassign a value of 0 to this? If so where do I assign this?
      
{      float grossPay;
   
    grossPay = (wage-tax);
      
      cout<< grossPay<<endl;
}
void Wages::displayLine()
{
      cout << setw (12) << left  << name
            << setw (11) << right << hours
            << setw (8)  << right << classification
            << setw (11)  << right << rate
            << setw (7) <<"$" << right <<wage
            << setw (6) <<"$" << right <<tax
            << setw (9) <<"$" << right <<grossPay ; /////This is where it should dispaly.However, My answer is 0
      
      cout << endl;      
Avatar of Member_2_1001466
Member_2_1001466

You assing the value to a local variable. When Wages::netPay ends the value is lost.
Do you wanted to assign the value (wage-tax) to a member variable?

void Wages::netPay()
{
     // float grossPay This local will make the member variable invisible.
     grossPay = (wage-tax);
     cout<< grossPay<<endl;
}
Can you please post the definition of class Wages if this was not the solution.
Hi,

You've defined float grossPay in ::netPay as a local variable. Since you output grossPay in the line
          << setw (9) <<"$" << right <<grossPay ; /////This is where it should dispaly.However, My answer is 0

I assume that grossPay is also defined as a class member. In this case, the local variable has a higher priority.

In other words, the class variable is never modified.
Simply remove the float grossPay declaration in netPay().

In order to make the local/instance distiction clearer, you can also use "this" explicitly:
void Wages::netPay()                    
{    
   
    this -> grossPay = (wage-tax);
     cout<< (this -> grossPay)<<endl;
}

But that's not necessary.

Avatar of bananaamy

ASKER


#include <iostream>
#include <cstring>
#include <ctype.h>
#include <string>
#include <iomanip>


using namespace std;
class Wages
{
private:
      string name;
      float hours;
      char classification;
      float rate;
      float wage;
      float tax;
      char enterChar;
      float grossPay ;
      
      
      public:
      void getName();
      float values();
      float assignHourlyRate();
      void calWage();
      void assignTax();
      void netPay();
      void displayHeadings();
      void displayLine();

      
};

      int main ()
      {
      Wages theWages;
      while(true)
      {
            theWages.getName();
            theWages.values();
            theWages.assignHourlyRate();
            theWages.calWage();
            theWages.assignTax();
            theWages.netPay();
            theWages.displayHeadings();
            theWages.displayLine();
      }
}

void Wages::getName()
{            
      cout<<"Please enter the Employees name: ";
      cin >>  name ;
      cout<<setw (33) << right <<"You have entered:"<< name << endl;
      cout<<setw (33) << right << "Is this correct? ";
      cin >>enterChar ;
      if (enterChar == 'N'||enterChar == 'n')
      {
            cout<<"Please reenter the correct name: ";
            cin >> name;
      }
}


float Wages::values()

{cout << "Enter "<<name<<"'s " << "total hours worked"": ";
cin >> hours ;
return 0;
}
float Wages::assignHourlyRate()
{
      cout << "Enter classification: ";
      cin >> classification;
      classification = toupper(classification);
      while (classification != 'A' && classification != 'B' && classification != 'C' && classification != 'D')
      {
            cout << "Your choices are A, B, C,or D : ";
            cin >> classification;
            classification = toupper(classification);
      }
      switch (classification)
      {
      case 'A':rate = 10.25;break;
      case 'B':rate = 8.5;break;
      case 'C':rate = 6.3;break;
      case 'D':rate = 4.65;break;
      }
      return 0;

}
void Wages::calWage()
{

      wage = (rate*hours);
      if (hours > 40)
      {
            wage = (wage+((hours-40)* rate/2));
      }
      
}
void Wages::assignTax()
{

      if (wage<=200.00)
      {tax = (wage *.12);
      cout <<"Tax rate:"<<" .12"<< endl;
      }
      else
            if
                  (wage >200.00 && wage <= 350.00)
            {
                  tax = (wage *.15);
                  cout <<"Tax rate:"<<" .15"<< endl;
            }
            else
            {
                  tax = (wage *.18);
                  cout <<"Tax rate:"<<" .18"<< endl;
            }

}
void Wages::netPay()
      
{      float grossPay;
   
    grossPay = (wage-tax);
      
      cout<< grossPay<<endl;
}
void Wages::displayHeadings()
{
      cout << "================================================="
            << "=====================\n";
      cout<<endl;
      cout << setw (12) << left << "Name"
            << setw (4) << right << "Hours Worked"
            << setw (7) << right << "Class"
            << setw (11) << right << "Hrly Wage"
            << setw (9) << right << "Net Pay"
            << setw (6) << right << "Tax"
            << setw (12) << right << "Gross Pay" << endl;
      cout << "------------------------------------------------"
            << "----------------------\n";
}
void Wages::displayLine()
{
      cout << setw (12) << left  << name
            << setw (11) << right << hours
            << setw (8) << right << classification
            << setw (11)  << right << rate
            << setw (7) <<"$" << right <<wage
            << setw (6) <<"$" << right <<tax
            << setw (9) <<"$" << right <<grossPay ;
      cout << endl;
      cout << endl;      
}      
   
SOLUTION
Avatar of Member_2_1001466
Member_2_1001466

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Avatar of Hamed Zaghaghi
Hamed Zaghaghi
Flag of Iran, Islamic Republic of image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Removing     float grossPay;  corrected my problem. Thank-you, so that statement redefine the vari ble within the funtion causing other funtions not to see it?
no they can see the member variable, but u have stroed the result of your calculation in the local varibale not in the member varibale, so the member variable has the initial value not the calculated value.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
just FYI. if you have a static member for a class, and you declare a local variable by the same name then you can access the static variable by className::varName.