2011-01-23 5 views
0

У меня есть заголовок (.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 для добавления заголовка. Он отлично работает, и я могу использовать функции. Проблема возникает, когда я хочу использовать эти функции в другом UIViewController. Если я не #import заголовок, я получаю предупреждение implicit declaration для имени функции, и если я делаю #import заголовок, я получаю ошибку duplicate symbol.

+2

атмосферное преломление? boy am, я заинтересован в том, что это приложение делает сейчас ... –

ответ

3

Один из способов сделать это, чтобы использовать комбинацию .h и .m файл:

Ваш .h должен выглядеть следующим образом:

extern float calcAtmosRefraction(float h0); 

и ваши .m должны иметь то, что у вас есть выше , #import файл .h, и вам будет хорошо.

Другой способ, которым вы можете это сделать, - сделать функцию static, чтобы она не была обновлена. Этот подход позволяет использовать только один файл .h.

+0

Это имеет смысл, это как мои другие пары файлов .h/.m' - '.h' объявляет материал, а' .m' реализует его. Благодаря! – Steve

1

Если ваша функция определена в заголовке (и у нее нет определения, которое существует в другом месте), тогда объявите ее static или inline.

Вы получаете дублируемую символьную ошибку, потому что C и C++ (и по расширению, Obj-C и Obj-C++) запрещают несколько определений одной функции. Либо static, либо inline устранит ошибку множественного определения.

Смежные вопросы