Reputation: 700
I get the error: expression must have a class type Firstly, I don't understand why I am getting this error. I create and object and use it. in my main:
#include "Worker.h"
int main()
{
Worker myWorker();
myWorker.inputInfo();
myWorker.displayPayBarGraph();
}
Worker.h
//Worker.h
//Definition of class Workers
//Member functions are defined in Worker.cpp
//Worker class defintion
class Worker
{
public:
Worker(); //constructor initializes worker type
void inputInfo(); //attains worker information
void displayPayBarGraph(); //prints a bar graph representation of the pay
private:
int workerCode; //worker type
//PAY FOR EACH WORKER
double code1pay; //manager
double code2pay; //hourly workers
double code3pay; //commission workrs
double code4pay; //pieceworkers
int hourlyWorkerPay(double, int); //returns the pay of hourly workers
int commissionPay(int); //returns the commission workers pay
int pieceWorkerPay(int, int); //returns the pieceworkers pay
};
Upvotes: 1
Views: 10631
Reputation: 41750
This error can also happen when the types are repeated in the call site of a constructor. Take this code for example:
class Worker {
public:
Worker(int a, int b);
void inputInfo();
};
int main() {
int a, b;
// Notice how that this looks like a function declaration.
// The types of a and b are repeated, but shouldn't.
Worker myWorker(int a, int b);
myWorker.inputInfo(); // error! expression must have a class type
}
This mistake is surprisingly done by many beginners. The fix is to remove the types from the parameters, as you don't need to repeat the types of the variables when using them:
Worker myWorker(a, b); // properly calls the constructor
Upvotes: 0
Reputation: 23793
This line:
Worker myWorker();
declares a function taking no parameters and returning a Worker
.
Simply declare your object with :
Worker myWorker;
Upvotes: 8
Reputation: 1152
Assuming the implementation of the Worker class is ok and no other errors,
int main()
{
Worker myWorker;
myWorker.inputInfo();
myWorker.displayPayBarGraph();
}
Upvotes: 0