ios - 错误的接收器类型 iOS
<p><p>好的,所以我已经在 SO 上环顾四周,发现了一些这样的问题,但我无法为我的特殊情况找到答案。每当我尝试获取传入的 <code>f</code> 数组的“计数”或大小时,都会收到 <code>Bad receiver type 'double *'</code> 错误。我尝试将其转换为 <code>int</code> 但这没有帮助。 </p>
<p>有什么建议吗?</p>
<pre><code>- (double[])convolve1D:(double[])total f:(double[])f size:(int)size {
double ConvOutput[ + -1];
double *F;
double *TOTAL;
for (int k = 0; k < ; k++)
F = f;
for (int k = 0; k < ; k++)
TOTAL = total;
for (int i = 0; i < ( + - 1);i++)
{
ConvOutput = 0;
for (int j = 0; j < ; j++)
{
if (i - j + 1 > 0)
ConvOutput+=TOTAL * F;
}
}
return ConvOutput;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我不确定这里的目标是什么。在 Objective-C 中,您可以使用 2 种数组 - 标准 C 数组和 Foundation 数组(<code>NSArray</code> 和 <code>NSMutableArray</code>) Foundation 数组只能包含 Foundation 对象,即 <code>NSNumber </code>s 而不是 <code>double</code>s。 C 数组不是对象,它们只是连续分配的内存块。</p>
<p>您正在尝试将 C 数组用作 Foundation 数组。您传入的 (<code>double[]</code>) 是(一旦复制到函数中)只是指向数组中第一个元素的指针,这就是您的“错误接收器类型 'double*' 错误是什么关于 - 您不能将消息 <code>count</code> 发送到该类型。它只是内存中的一个地址。</p>
<p>所以你的方法的签名应该是:</p>
<p><code>- (void)convolve1D:(NSArray*)total f:(NSArray*)f size:(int)size</code>.</p>
<p>至于该方法的其余部分,您无法以您尝试的方式初始化 Foundation 数组。可以使用容量初始化 <code>NSMutableArray</code>,但这是对编译器保留该空间量的提示,仅此而已:初始化后,它将包含 0 个对象,而不是您的任何数量传递给容量参数。
由于这个原因,您不能执行 <code>F = f;</code> 之类的操作,因为索引将不存在。相反,您必须使用 <code>addObject:</code>。 </p>
<p>另外,请记住 <code>NSArray</code>s 包含 <code>NSNumbers</code>,而不是 double 。要将 <code>NSNumber</code> 的值作为 <code>double</code> 获取,必须调用 <code>;</code> 来创建 <code>NSNumber</code>,使用 <code>NSNumber</code> 文字语法,例如<code>@0.1</code> 或 <code>@(someDoubleVariable);</code>。这种包装和展开是令人厌烦的,但不幸的是,如果你想使用 Objective-C 类来做到这一点,这是必要的。 </p>
<pre><code>- (NSArray*)convolve1D:(NSArray*)total f:(NSArray*)f size:(int)size
{
NSMutableArray *convOutput = + -1];
NSMutableArray *fArray = ;
NSMutableArray *innerTotal = ;
for (int k = 0; k < ; k++)
{
];
];
}
for (int i = 0; i < ( + - 1);i++)
{
;
for (int j = 0; j < ; j++)
{
if (i - j + 1 > 0)
{
double val1 = doubleValue];
double val2 = doubleValue];
double currentVal = doubleValue];
convOutput = @(val1 * val2 + currentVal);
}
}
}
return (NSArray*)convOutput;
}
</code></pre>
<p>我还更改了一些变量的名称。一般来说,在 Objective-C 中,变量不应该大写(这是为类名保留的),并且应该是驼峰式。使用描述性的非单个字母名称也是一个好主意。
最后一点 - 我会重新编辑你的问题,所以它不包含带有 <code>NSArray</code>s 的修改后的方法签名 - 因为这个问题对其他人来说毫无意义,因为你的代码'已发布将不再产生您在问题中描述的错误</p></p>
<p style="font-size: 20px;">关于ios - 错误的接收器类型 iOS,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/24417217/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/24417217/
</a>
</p>
页:
[1]