【问题标题】:Expression preceding parentheses?括号前的表达式?
【发布时间】:2017-12-10 21:03:42
【问题描述】:

我对编程很陌生,我正在尝试创建一个简单的延迟,但我不断收到错误消息 - “明显调用的括号前的表达式必须具有(指向)函数类型”。

此代码用于游戏,它应该稍微延迟球拍运动。

void AI(void)
{
    unsigned int delay = 1000;

    if (yR2 > yBall)
    {
        if (yR2 > RACKET ) 
        {
            delay(1000);
            yR2--; 
        }
    }

我不知道为什么这不起作用,我已经尝试了很多年。它有什么问题,为什么会出现这个错误?

编辑:

我已经更新了代码。这似乎是正确的,但是当我尝试使用延迟时,整个屏幕都会延迟,而不仅仅是球拍(yR2)。

这是为什么?

void delay(int n)
{
volatile int i;
for (i = 0 ; i < n ; i++)
  ;
}


void AI(void)
{
if (yR2 > yBall)
{
if (yR2 > RACKET) 
{
   delay(1000);
yR2--;
}
}

【问题讨论】:

  • delay 在您的代码中是unsigned int 的变量。如果之前声明过这样的函数,它会被该变量屏蔽(覆盖)
  • 如果你有一个要调用的延迟函数,那么通过定义一个同名的变量来停止隐藏它。也就是说 -- 将整数重命名为 delay 以外的名称,因此它不会干扰您调用名为 delay函数 的能力。
  • 请不要以隐藏原文的方式改写您的问题。此外,您的 delay() 函数不执行任何操作,这意味着它可能会被任何体面的优化编译器完全优化掉。
  • 你发布了你的问题,人们回答并评论了它,然后你改变了你的问题,使答案过时了。不要那样做。如果您要使用现有代码发布一个新问题,可能会有一个合理的答案,但我不会在这里发布它。 (提示:delay(1000) 可能需要很少的时间来执行。提示:有更好的方法来延迟指定的时间,但它们是特定于系统的。)
  • 您的原始问题已得到解答。发布一个新的。

标签: c


【解决方案1】:

错误是指这一行:

delay(1000);

在这里,您(显然)试图将 delay 作为函数调用。

但是,delay 被声明为:

unsigned int delay = 1000;

它只是一个数字,而不是一个函数,因此你不能调用它。

【讨论】:

  • 感谢您的回复。我将如何解决这个问题?我需要创建一个函数吗?如果需要,它会是什么样子。我的编程时间不长,对于不太聪明的问题,我深表歉意。
  • @nothing909 你为什么一开始就把unsigned int delay = 1000;delay(1000); 放在你的代码中?
  • 我只是没有最好的编程知识,也没有完全理解我在做什么。它正在声明变量 int delay... 然后将其称为 delay(1000)。我现在发现这不是它的工作原理..
  • 当你调用一个int类型的变量时,你期望它做什么?如果您不告诉我们您想要代码做什么,我们就无法告诉您如何更改它以获得您想要的。
  • @nothing909 “调用变量”是什么意思?那是……不是一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多