2009-08-30 7 views
3

Hé les gars, je travaille sur mon premier programme C++ pour l'école. Pour une raison quelconque, je reçois l'erreur suivante lorsque je tente de le compiler:Erreur C++ simple: "... non déclaré (utilisez d'abord cette fonction)"

`truncate' undeclared (first use this function) 

Source complet:

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

Toute aide serait appréciée. Merci.

Répondre

10

Vous devez déclaration avant avant main:

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

Vous pouvez simplement définir vos fonctions avant principale, qui va résoudre le problème aussi:

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

J'ai fait la deuxième solution, mais j'ai encore la même erreur! –

3

Vous essayez d'appeler une fonction truncate() à:

centimeters = truncate(centimeters); 

Vous n'êtes pas encore dit au compilateur que la fonction est, il est donc défini et le compilateur objecte.

En C++, toutes les fonctions doivent être déclarées (ou définies) avant d'être utilisées. Si vous pensez utiliser une fonction de bibliothèque C++ standard, vous devez inclure son en-tête. Si vous n'êtes pas sûr d'utiliser une fonction de bibliothèque C++, vous devez déclarer et définir les vôtres. Sachez que sur les systèmes POSIX, truncate() est un appel système qui tronque un fichier existant; il aura un prototype différent de ce que vous essayez d'utiliser.


Plus bas votre code - caché le fond de la barre de défilement - sont les définitions de fonctions pour truncate() et round(). Placez les définitions de fonction en haut du fichier, de sorte que le compilateur connaisse leur signature avant de les utiliser. Ou ajoutez des déclarations anticipées des fonctions en haut du fichier et laissez les définitions là où elles se trouvent.

2

Vous devez déclarer les fonctions avant d'utiliser leur. Déplacer les définitions de truncate et round au-dessus de la fonction main devrait faire l'affaire.

+0

Ou simplement fournir des déclarations, comme dit AraK. – a2800276

+0

Merci pour l'aide les gars. Cela a réglé le problème. – Pooch

Questions connexes