【问题标题】:Problems assigning incremented values to CGPointMake将增量值分配给 CGPointMake 的问题
【发布时间】:2011-11-30 12:16:42
【问题描述】:

我正在尝试使用以下代码通过 webView 浏览 Pdf 页面。

 float Y = pdfNavigateController.webView.center.y + gY;
 [pdfNavigateController.webView.scrollView setContentOffset:CGPointMake(0,Y)];

值 gY 也是一个浮点数,并随着用户选择下一页而递增。该代码当前抛出错误“二进制表达式的无效操作数('CGFloat'(又名'float')和'float *')。我猜操作数是无效的,因为该值是一个指针,但我不知道如何在不出现此错误的情况下传递递增的值。

【问题讨论】:

  • 你能告诉我们 gY 的确切来源,或者它是如何实例化的吗?由于错误似乎读起来就像您正在尝试将 float*(浮点指针)添加到浮点(CGFloat)。这种暗示 gY 实际上被声明为 float*。
  • 代码中的 gY 是什么?它在哪里声明?
  • gY 与所有其他全局变量一起在页面顶部声明为静态浮点 *gY = 0。它在到达您在上面看到的代码之前递增。这个想法是,上面的代码在每次按下“下一步”按钮移动到下一页后运行。正是上面的代码导致了问题,因为它不接受 gY 作为变量。

标签: iphone xcode uiwebview cgfloat


【解决方案1】:

如果gY 是指向浮点数的指针,则使用*gY

float Y = pdfNavigateController.webView.center.y + *gY;

错误信息:('CGFloat' (aka 'float') and 'float *') 是说CGFloat 期望float 但得到一个浮点指针:float *

为了调试,首先将操作分解为访问指向的值。

float gYValue = *gY;
float Y = pdfNavigateController.webView.center.y + gYValue;

【讨论】:

  • 上面的代码编译正常,但是挂在行 float gYValue = *gY;
【解决方案2】:

如果 gY 是一个指针(指向一个浮点数),您需要取消对它的引用才能访问它的值:

float Y = pdfNavigateController.webView.center.y + *gY;

编辑

确保你有一个有效的指针(即 gY 指向一个实际的浮点数)。 如果它是一个未初始化的指针,它将不起作用。

你能告诉我们你是怎么得到gY的吗?

编辑 2

我看到你说 gY 被声明为:

static float *gY = 0;

这是一个 NULL 指针。
而且你不能取消引用一个 NULL 指针。

当你增加它时,你增加的是指针(内存地址),而不是值。 所以你的指针实际上指向垃圾。

为什么要使用指针? 你应该使用:

static float gY = 0;

【讨论】:

  • 如上所述,即使我在它周围包装了一个异常处理程序,代码也会挂在这一行上。
  • 感谢您现在可以正常工作,我非常感谢您的 cmets,愚蠢的错误引用了 NULL 指针,但很高兴您指出了这一点。
【解决方案3】:

由于您发布了非常少量的代码,因此很难进行故障排除。不过我有个主意。如果 gX 是方法的参数,则解决方案可能如下:

为了解决这个问题,将方法的声明添加到您的类的 .h 文件中。希望这会有所帮助 - 如果没有,请发布更多代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-06-05
    相关资源
    最近更新 更多