2011-01-23 33 views
0

我有一個頭(.h),我已經定義了一堆數學函數文件,例如這一個計算大氣折射...#進口功能到多個源文件

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添加標題。它工作正常,我可以使用這些功能。當我想在不同的UIViewController.中使用這些函數時會出現問題如果我不是#import的頭文件,我會得到一個implicit declaration警告函數名稱,如果我的頭文件是#import,則會出現duplicate symbol錯誤。你可以這樣做

+2

大氣折射?男孩是我感興趣的是這個程序現在確實... – 2011-01-23 19:52:48

回答

3

的一種方法是使用.h的組合和.m文件:

.h應該是這樣的:

extern float calcAtmosRefraction(float h0); 

和你.m應該有你有什麼上方。 #import.h文件,你會很好去。

你可以做到這一點的另一種方法是使函數static所以它不會重新聲明。這種方法允許您只使用一個.h文件。

+0

這是有道理的,它就像我的其他`.H/.m`文件對 - 的`.h`聲明的東西和`.m`實現它。謝謝! – Steve 2011-01-23 19:56:42

1

如果您的函數是在頭文件中定義的(並且它沒有定義生存在別處),則聲明它爲staticinline

你得到一個重複的符號錯誤,因爲C和C++(通過擴展,OBJ-C和對象 - C++)禁止單一功能的多個定義。 staticinline將消除多重定義錯誤。