Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ identifier is undefined

I'm new to C++ I don't understand why I'm getting this error. Out of 5 statements that are similar 3 mark error but the other two are okay. The error is in the main function.

    #include <iostream>
using namespace std;

// Function declaration
void getGallons(int wall);
void getHours(int gallons);
void getCostpaint(int gallons, int pricePaint);
void getLaborcharges(int hours);
void getTotalcost(int costPaint, int laborCharges);

// Function definition
void getGallons(int wall)
{
    int gallons;

    gallons = wall / 112;

    cout << "Number of gallons of paint required: " << gallons << endl;


}

// Function definition
void getHours(int gallons)
{
    int hours;

    hours = gallons * 8;

    cout << "Hours of labor required: " << hours << endl;


}

// Function definition
void getCostpaint(int gallons, int pricePaint)
{
    int costPaint;

    costPaint = gallons * pricePaint;

    cout << "The cost of paint: " << costPaint << endl;
}

// Function definition
void getLaborcharges(int hours)
{
    int laborCharges;

    laborCharges = hours * 35;

    cout << "The labor charge: " << laborCharges << endl;
}

// Funtion definition
void getTotalcost(int costPaint, int laborCharges)
{
    int totalCost;

    totalCost = costPaint + laborCharges;

    cout << "The total cost of the job: " << totalCost << endl;
}

// The main method
int main()
{
    int wall;
    int pricePaint;

    cout << "Enter square feet of wall: ";
    cin >> wall;

    cout << "Enter price of paint per gallon: ";
    cin >> pricePaint;

    getGallons(wall);

    getHours(gallons); // error here

    getCostpaint(gallons, pricePaint);

    getLaborcharges(hours); // error here

    getTotalcost(costPaint, laborCharges); //error here

    return 0;

}

This lesson focused on using functions and passing parameters in the code. I'm not supposed to use global variables. If you have a better way to do this please share.

like image 585
hcas Avatar asked Oct 03 '19 04:10

hcas


People also ask

What is undefined identifier?

The compiler emits an 'undeclared identifier' error when you have attempted to use some identifier (what would be the name of a function, variable, class, etc.) and the compiler has not seen a declaration for it. That is, the compiler has no idea what you are referring to because it hasn't seen it before.

Is undefined in C?

C and C++ have undefined behaviours because it allows compilers to avoid lots of checks.


1 Answers

Reducing to three lines (the other errors are analogous):

int wall;    
getGallons(wall);
getHours(gallons); // error here

While wall is defined, gallons is not. And where do you want to get gallons from anyway? The result is hidden deep inside another function. How do you want to get it out from there?

Well, you need a return value:

  int getGallons(int wall)
//^^^ !
{
     int gallons = wall / 112;
     // ...
     return gallons; // !
}

This way, you can use your function like this:

int gallons = getGallons(wall);
// now gallons is defined and you can use it:
getHours(gallons);

Analogously for the other functions and variables.

Usually, it is not a good idea to mix logic (calculations) and output in the same fucntion. So I'd rather move writing to console into main function:

int getGallons(int wall) { return wall / 112; }
int getHours(int gallons) { return gallons * 8; }

int wall;
std::cin >> wall;
int gallons = getGallons(int wall);
std::cout << ...;
int hours = getHours(gallons);
std::cout << ...;

Notice? All input/output now is at the same level...

Side note: It is not necessary to declare functions before defining them if you don't use them before definition:

//void f(); // CAN be ommitted
void f() { };
void g() { f(); }

Counter-example:

void f();
void g() { f(); } // now using f before it is defined, thus you NEED do declare it
void f() { };

If you still want to keep the declarations is rather a matter of style (but will get important when managing code in different compilation units, as you'd then have the declarations in header files – you'll encounter soon in next lessons).

like image 133
Aconcagua Avatar answered Sep 29 '22 23:09

Aconcagua