好的,所以我已经看过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;
}
答案 0 :(得分:1)
我不确定这里的目标是什么。在Objective-C中,您可以使用两种类型的数组 - 标准C数组和Foundation数组(NSArray
和NSMutableArray
)基础数组只能包含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的修改方法签名 - 因为从您发布的代码开始,问题对其他人没有意义将不再生成您在问题中描述的错误