2009-08-30 1 views
3

お元気ですか、私は学校向けの最初の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; 
} 

任意の助けいただければ幸いです。ありがとう。

答えて

10

あなたのmain前に前方宣言が必要になります。

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

あなたはあまりにも問題を解決すること、メインの前に、あなたの関数を定義することができます。

#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

私は2番目の解決策を実行しましたが、同じエラーが発生しています。 –

3

あなたはで機能truncate()を呼び出そうとしている:あなたはまだ、その関数が何であるかをコンパイラに告げていないので、それが定義されていないと、コンパイラが反対している

centimeters = truncate(centimeters); 

C++では、すべての関数を宣言(または定義)してから使用する必要があります。標準のC++ライブラリ関数を使用していると思われる場合は、そのヘッダをインクルードする必要があります。 C++ライブラリ関数を使用しているかどうかわからない場合は、独自の関数を宣言して定義する必要があります。

POSIXベースのシステムでは、truncate()は既存のファイルを切り捨てるシステムコールであることに注意してください。それはあなたが使っているものとは異なるプロトタイプを持っています。


はまた、あなたのコードの下 - スクロールバーの下をオフに隠さ - truncate()round()のための関数定義されています。関数定義をファイルの先頭に置き、使用前にコンパイラーが署名を知るようにします。あるいは、ファイルの先頭に関数の前方宣言を追加して、定義をそのまま残しておきます。

2

あなたが使用する前に関数を宣言する必要がありますそれら。 main関数の上にtruncateroundの定義を移動すると、このトリックを行う必要があります。

+0

AraKのように、宣言を提供するだけです。 – a2800276

+0

助けを借りてくれてありがとう。これで問題は解決しました。 – Pooch

関連する問題