我有一个标题(.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
警告,如果我这样做{ {1}}标题,我收到#import
错误。
答案 0 :(得分:3)
您可以这样做的一种方法是使用.h
和.m
文件的组合:
您的.h
应如下所示:
extern float calcAtmosRefraction(float h0);
你的.m
应该拥有上面的内容。 #import
.h
文件,你会很高兴。
另一种方法是创建函数static
,这样就不会重新声明。此方法允许您仅使用一个.h
文件。
答案 1 :(得分:1)
如果你的函数是在标题中定义的(并且它的定义不在其他地方),那么将其声明为static
或inline
。
你得到一个重复的符号错误,因为C和C ++(以及扩展名,Obj-C和Obj-C ++)不允许单个函数的多个定义。 static
或inline
将消除多重定义错误。