简单的C ++错误:“...未声明(首先使用此功能)”

时间:2009-08-30 18:25:10

标签: c++

嘿伙计们,我正在研究我的第一个C ++课程。出于某种原因,当我尝试编译它时出现以下错误:

`truncate' undeclared (first use this function)

完整来源:

#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;
}

任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:10)

您需要在main之前提前申报:

double truncate(double d);
double round(double d);

您可以在main之前定义您的函数,这也将解决问题:

#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() {
...
}

答案 1 :(得分:3)

您正尝试在以下位置调用函数truncate()

centimeters = truncate(centimeters);

您还没有告诉编译器该函数是什么,所以它是未定义的并且编译器是反对的。

在C ++中,必须在使用之前声明(或定义)所有函数。如果您认为您使用的是标准C ++库函数,则需要包含其标题。如果您不确定是否使用C ++库函数,则需要声明并定义自己的函数。

请注意,在基于POSIX的系统上,truncate()是一个截断现有文件的系统调用;它将与您尝试使用的原型不同。


进一步向下隐藏在滚动条底部的代码 - 是truncate()round()的功能定义。将函数定义放在文件的顶部,以便编译器在使用它们之前知道它们的签名。或者在文件顶部添加函数的前向声明,并将定义保留在它们所在的位置。

答案 2 :(得分:2)

您需要在使用之前声明函数。将truncateround的定义移到main函数之上应该可以解决问题。