糟糕的接收器类型iOS

时间:2014-06-25 19:44:03

标签: ios xcode

好的,所以我已经看过SO了,我看到了几个像这样的问题,但我无法找到适合我特殊情况的答案。每当我试图得到"计数"或者传入的f数组的大小,我得到Bad receiver type 'double *'错误。我尝试将其转换为int,但这没有帮助。

有什么建议吗?

- (double[])convolve1D:(double[])total f:(double[])f size:(int)size { 
     double ConvOutput[[total count] + [f count]-1];
     double *F[size];
     double *TOTAL[size];

     for (int k = 0; k < [f count]; k++)
         F[k] = f[k];
     for (int k = 0; k < [f count]; k++)
         TOTAL[k] = total[k];
     for (int i = 0; i < ([f count] + [total count] - 1);i++)
     {
         ConvOutput[i] = 0;
         for (int j = 0; j < [total count]; j++)
         {
             if (i - j + 1 > 0)
                 ConvOutput[i]+=TOTAL[j] * F[i - j];
         }
     }

return ConvOutput;
}

1 个答案:

答案 0 :(得分:1)

我不确定这里的目标是什么。在Objective-C中,您可以使用两种类型的数组 - 标准C数组和Foundation数组(NSArrayNSMutableArray)基础数组只能包含Foundation对象,即NSNumber而不是{{ 1}}秒。 C数组不是对象,它们只是连续分配的内存块。

您正在尝试将C数组用作Foundation数组。你传入的内容(double)是(一旦被复制到函数中)只是一个指向数组中第一个元素的指针,这就是你的'错误接收器类型'双*'错误的意思 - 你可以' t将消息double[]发送给该类型。它只是记忆中的一个地址。

所以你方法的签名应该是:

count

至于方法的其余部分,您无法以您尝试的方式初始化Foundation数组。可以使用容量初始化- (void)convolve1D:(NSArray*)total f:(NSArray*)f size:(int)size,但这是编译器保留该空间量的提示,仅此而已:在初始化之后,它将包含0个对象,而不是您传递给的任何数字。容量参数。 因此,您无法执行NSMutableArray之类的操作,因为索引不存在。相反,您必须使用F[k] = f[k];

另外,请记住addObject:包含NSArray,而不是双倍。要获取NSNumbers作为NSNumber的值,您必须致电double要创建[numberObject doubleValue];,请使用NSNumber字面语法,例如NSNumber@0.1。这种包装和展开是令人厌倦的,但不幸的是,如果你想使用Objective-C类来做这件事。

@(someDoubleVariable);

我还更改了一些变量的名称。通常在Objective-C中,变量不应该大写(这是为类的名称保留的),并且应该在camelCase中。使用描述性的非单字母名称也是一个好主意。 作为最后一点 - 我会重新编辑您的问题,因此它不包含带有- (NSArray*)convolve1D:(NSArray*)total f:(NSArray*)f size:(int)size { NSMutableArray *convOutput = [NSMutableArray arrayWithCapacity:[total count] + [f count]-1]; NSMutableArray *fArray = [NSMutableArray arrayWithCapacity:size]; NSMutableArray *innerTotal = [NSMutableArray arrayWithCapacity:size]; for (int k = 0; k < [f count]; k++) { [fArray addObject:f[k]]; [innerTotal addObject:total[k]]; } for (int i = 0; i < ([f count] + [total count] - 1);i++) { [convOutput addObject:@0]; for (int j = 0; j < [total count]; j++) { if (i - j + 1 > 0) { double val1 = [innerTotal[j] doubleValue]; double val2 = [fArray[i-j] doubleValue]; double currentVal = [convOutput[i] doubleValue]; convOutput[i] = @(val1 * val2 + currentVal); } } } return (NSArray*)convOutput; } s的修改方法签名 - 因为从您发布的代码开始,问题对其他人没有意义将不再生成您在问题中描述的错误