我正在编写一个用于低通滤波器的程序。编译时出现以下错误:


  被调用的对象不是函数或函数指针


对于我用double声明的变量。知道为什么会这样吗?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char **argv) {
  double omega1, omega2, omegac, T, dt;
  int N, method;
  FILE *in;

  // Open the file and scan the input variables.
  if (argv[1] == NULL) {
    printf("You need an input file.\n");
    return -1;
  }
  in = fopen(argv[1], "r");
  if (in == NULL)
    return -1;
  fscanf(in, "%lf", &omega1);
  fscanf(in, "%lf", &omega2);
  fscanf(in, "%lf", &omegac);
  fscanf(in, "%d", &method);

  T = 3 * 2 * M_PI / omega1; // Total time
  N = 20 * T / (2 * M_PI / omega2); // Total number of time steps
  dt = T / N;   // Time step ("delta t")

  // Method number 1 corresponds to the finite difference method.
  if (method == 1) {
    int i;
    double Voutnew = 0, Voutcur = 0, Voutprev = 0;

    for (i = N; i != 0; i--) {
      Voutnew = ((1/((1/((sqrt(2))(dt)(omegac))) + (1/((dt)(dt)(omegac) (omegac))))) * (((2/((dt)(dt)(omegac)(omegac))) - 1)(Voutcur) + (1/((1/((sqrt(2))(dt)(omegac))) - (1/((dt)(dt)(omegac)(omegac)))))(Voutprev) + Sin((omega1)(T)) + (1/2)(Sin((omega2)(T)))));
      Voutcur = Voutnew; // updates variable
      Voutprev = Voutcur;   // passes down variable to next state
      printf("%lf\n", Voutnew);
    }
  } else {
    // Print error message.
    printf("Incorrect method number.\n");
    return -1;
  }
  fclose(in);
  return 0;
}


这是我得到的错误列表:

In function 'main':
Line 38: error: called object '1.41421356237309514547462185873882845044136047363e+0' is not a function
Line 38: error: called object 'dt' is not a function
Line 38: error: called object 'dt' is not a function
Line 38: error: called object '1.41421356237309514547462185873882845044136047363e+0' is not a function
Line 38: error: called object 'dt' is not a function
Line 38: error: called object 'omega1' is not a function
Line 38: error: called object 'omega2' is not a function
Line 38: error: called object '0' is not a function

最佳答案

您需要乘法运算符

((sqrt(2))(dt)(omegac)


例如,这是错误的,您应该至少在我至少知道的所有编程语言中明确指定乘法运算符

sqrt(2) * dt * omegac


同样,使用太多的括号会使您的代码真的很难阅读,所以不要。

错误消息就是使用括号,因为

(dt)(omegac)


解释为dt是一个函数,而omegac是传递给它的参数,并且由于dt不是一个函数,因此出现错误消息是有道理的。

这只是需要修复的代码的一小部分,如果我是您,我会将表达式拆分为子表达式,要在那里的大型代码中发现错误并不容易。

未定义对Sin的引用是因为c区分大小写,没有名为Sin的函数,它是sin

关于c - 被调用的对象不是函数或函数指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28663599/

10-12 17:17
查看更多