2011-01-23 10 views
0

私は大気の屈折を算出し、例えば、この1、で数学関数の束を定義したヘッダ(.h)ファイルを持っている...の#import機能

float calcAtmosRefraction(float h0) { 
    float ref = 0.0; 
    if (h0 > 85) { 
     ref = 0.0; 
    } 
    else if (h0 > 5) { 
     ref = (58.1/tan(degToRad(h0)) - 0.07/pow(tan(degToRad(h0)), 3) + 0.000086/pow(tan(degToRad(h0)), 5))/3600; 
    } 
    else if (h0 > -0.575) { 
     ref = (1735 + h0 * (-518.2 + h0 * (103.4 + h0 * (-12.79 + h0 * 0.711))))/3600; 
    } 
    else { 
     ref = -20.772/tan(degToRad(h0))/3600; 
    } 
    return ref; // in degrees 
} 

..私のメインのUIViewController's実装ファイルでは、私は#importを使ってヘッダを追加しています。それは正常に動作し、私は機能を使用することができます。これらの機能を別のもので使用したいときに問題が発生する私は#importヘッダーがなければ、implicit declaration関数名の警告を受け取り、#importヘッダーを入力すると、duplicate symbolエラーが発生します。あなたがこれを行うことができます

+2

大気屈折?私はこのアプリケーションが今何をしているのか興味があります... –

答えて

3

一つの方法は、.hの組み合わせと.mファイルを使用することです:

あなた.h次のようになります。

extern float calcAtmosRefraction(float h0); 

そして、あなたの.mはあなたが上記の持っているものを持っている必要があります。 #importファイル.hとすればいいですよ。

もう1つの方法は、関数staticを再宣言しないようにすることです。この方法では、ファイルを1つだけ使用することができます。.h

+0

それは私の他の '.h/.m'ファイルのペアと同じです - ' .h'はものを宣言し、 '.m'はそれを実装します。ありがとう! – Steve

1

関数がヘッダーに定義されていて、他の場所に存在する定義がない場合は、staticまたはinlineと宣言します。

CおよびC++(および拡張機能Obj-CおよびObj-C++)は、単一の関数の複数の定義を禁止するため、重複するシンボルエラーが発生しています。 staticまたはinlineは、多重定義エラーを解消します。

関連する問題