好的,给你。我已经完成了一个可可基础工具,计算随机整数的平均绝对偏差(只是作为一个学习项目)。
我已经将计算移到一个名为“findMeanAbsoluteDeviation()”的函数中,它接受一个NSNumber对象的nsmutable数组来执行计算。无论如何。所以当我把它和其他代码声明在同一个“.m”文件中时,这一切都很好。
#import <Foundation/Foundation.h>
float findMeanAbsoluteDeviation(NSMutableArray * array);
int main (int argc, const char * argv[]) {
...generate random integers, execute function...
meanAbsoluteDeviation = findMeanAbsoluteDeviation(numArray);
}
float findMeanAbsoluteDeviation(NSMutableArray * array) {
...mean absolute deviation maths...
}
而且效果很好。现在,我想把函数移到一个外部文件中。我创造了一个
名为“mad”的NSObject的子类。我把函数移到疯狂的“mad.m”中,读了一遍,然后重新格式化声明,使其看起来像
-(float)findMeanAbsoluteDeviation:(NSMutableArray *)array {
...code...
}
在我的“mad.h”文件里。
@interface mad : NSObject {
}
- (float)findMeanAbsoluteDeviation:(NSMutableArray *)array;
@end
看起来都很棒。正确的?我所要做的就是。。。
#import "mad.m"
在“main.m”文件的顶部,像往常一样使用这个函数。嗯,它似乎没有正确编译。
ld: duplicate symbol .objc_class_name_mad in ------standardDeviation.build/Debug/standardDeviation.build/Objects-normal/i386/mad.o and ------standardDeviation.build/Debug/standardDeviation.build/Objects-normal/i386/standardDeviation.o
为了长度起见省略了“---”
Command /Developer/usr/bin/gcc-4.0 failed with error code 1
有什么想法吗?谢谢你的帮助!
最佳答案
您需要#import "mad.h"
,而不是#import "mad.m"
,否则将对类实现求值两次,因此会看到错误。
一些文体要点:
如果不使用对象的实例变量进行任何操作,通常编写的是类方法(+)而不是实例方法(-)。
在Objective-C头文件中声明一个C函数原型是没有问题的,如果一个类接口对您正在做的事情没有意义的话。有关一些示例,请参见NSGeometry.h
。
如果不改变函数或方法中的数组,则不要使用可变数组参数。
考虑对类、方法和函数使用标准的Cocoa命名约定。
例如:
@interface MEMeanAbsoluteDeviation : NSObject {
}
+ (float)meanAbsoluteDeviation:(NSArray *)array;
或者简单地说:
float MEMeanAbsoluteDeviation(NSArray *array);