好的,给你。我已经完成了一个可可基础工具,计算随机整数的平均绝对偏差(只是作为一个学习项目)。
我已经将计算移到一个名为“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);

10-08 04:14