菜鸟教程小白 发表于 2022-12-12 23:18:39

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 &lt; ; k++)
         F = f;
   for (int k = 0; k &lt; ; k++)
         TOTAL = total;
   for (int i = 0; i &lt; ( + - 1);i++)
   {
         ConvOutput = 0;
         for (int j = 0; j &lt; ; j++)
         {
             if (i - j + 1 &gt; 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 &lt; ; k++)
   {
      ];
      ];
   }

   for (int i = 0; i &lt; ( + - 1);i++)
   {
         ;

         for (int j = 0; j &lt; ; j++)
         {
             if (i - j + 1 &gt; 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]
查看完整版本: ios - 错误的接收器类型 iOS