monkey doodle
monkey doodle

Reputation: 700

error: expression must have a class type

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

Answers (3)

Guillaume Racicot
Guillaume Racicot

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

quantdev
quantdev

Reputation: 23793

Most vexing parse :

This line:

Worker myWorker();

declares a function taking no parameters and returning a Worker.

Simply declare your object with :

Worker myWorker;

Upvotes: 8

elimad
elimad

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

Related Questions