Reputation: 299
I am working on my first C++ program for school. For some reason I am getting the following error when I try to compile it:
`truncate' undeclared (first use this function)
Full Source:
#include <iostream>
#include <math.h>
using namespace std;
#define CENTIMETERS_IN_INCH 2.54
#define POUNDS_IN_KILOGRAM 2.2
int main() {
double feet, inches, centimeters, weight_in_kg, weight_in_lbs;
// get height in feet and inches
cout << "Enter height (feet): ";
cin >> feet;
cout << "Enter (inches): ";
cin >> inches;
// convert feet and inches into centimeters
centimeters = ((12 * feet) + inches) * CENTIMETERS_IN_INCH;
// round 2 decimal places and truncate
centimeters = truncate(centimeters);
printf("Someone that is %g' %g\" would be %g cm tall", feet, inches, centimeters);
// weights for bmi of 18.5
weight_in_kg = truncate(18.5 * centimeters);
weight_in_lbs = round(weight_in_kg * POUNDS_IN_KILOGRAM);
printf("18.5 BMI would correspond to about %g kg or %g lbs", weight_in_kg, weight_in_lbs);
// weights for bmi of 25
weight_in_kg = truncate(25 * centimeters);
weight_in_lbs = round(weight_in_kg * POUNDS_IN_KILOGRAM);
printf("25.0 BMI would correspond to about %g kg or %g lbs", weight_in_kg, weight_in_lbs);
// pause output
cin >> feet;
return 0;
}
// round result
double round(double d) {
return floor(d + 0.5);
}
// round and truncate to 1 decimal place
double truncate(double d) {
return round(double * 10) / 10;
}
Any help would be appreciated. Thanks.
Upvotes: 3
Views: 49139
Reputation: 754450
You are attempting to call a function truncate()
at:
centimeters = truncate(centimeters);
You have not yet told the compiler what that function is, so it is undefined and the compiler is objecting.
In C++, all functions must be declared (or defined) before they are used. If you think you are using a standard C++ library function, you need to include its header. If you are not sure that you are using a C++ library function, you need to declare and define your own.
Be aware that on POSIX-based systems, truncate()
is a system call that truncates an existing file; it will have a different prototype from what you are trying to use.
Further down your code - hidden off the bottom of the scroll bar - are the function definitions for truncate()
and round()
. Put the function definitions at the top of the file, so that the compiler knows about their signature before they are used. Or add forward declarations of the functions at the top of the file and leave the definitions where they are.
Upvotes: 3
Reputation: 3328
You need to declare functions before you use them. Moving the definitions of truncate
and round
above the main
function should do the trick.
Upvotes: 3
Reputation: 96879
You need forward declaration before your main
:
double truncate(double d);
double round(double d);
You could just define your functions before main, that will solve the problem too:
#include <iostream>
#include <math.h>
using namespace std;
#define CENTIMETERS_IN_INCH 2.54
#define POUNDS_IN_KILOGRAM 2.2
// round result
double round(double d) {
return floor(d + 0.5);
}
// round and truncate to 1 decimal place
double truncate(double d) {
return round(double * 10) / 10;
}
int main() {
...
}
Upvotes: 10