编译错误(称为函数不是对象)

时间:2015-11-04 08:15:07

标签: c

我正在尝试为poissons方程编写代码。我编写了代码,但是它给出了一个编译错误:'被调用的函数不是对象或函数指针。

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

int main(int argc, char* argv[])
{
    int U[101][101];
    int Unew[101][101];
    double Nx = 100, Ny = 100;
    float tol = 0.00001;
    float L = 2.0;
    int i, j;
    float pi = 3.14;
    float Dx, Dy, x, y;
    Dx = (L / Nx) + 1;
    Dy = (L / Ny) + 1;
    for(i = 1; i <= 101; i++) {
        for(j = 1; j <= 101; j++) {
        }
    }
    x = (i - 1) * Dx;
    y = (j - 1) * Dy;
    for(i = 1; i <= 101; i++) {
        for(j = 1; j <= 101; j++) {
            U[i][j] = 0.0;
        }
    }
    for(i = 1; i <= 101; i++) {
        U[i][1] = 0.0;
    }
    for(j = 1; j <= 101; j++) {
        U[101][j] = 0.0;
    }
    for(i = 1; i <= 101; i++) {
        U[i][j] = 0.0;
    }
    double iter;
    double residual;
    for(iter = 1; iter <= 10000; iter++) {
        for(i = 2; i <= 101; i++) {
            for(j = 2; j <= 101; j++) {
                Unew[i][j] = (Dy * Dy * (U[i - 1][j] + U[i + 1][j]) + Dx * Dx * (U[i][j - 1] + U[i][j + 1]) -
                              Dx * Dx * Dy * Dy * (cos(pi * Dx) * sin(pi * Dy) + pi * pi * cos(pi * Dx) * sin(Dy))) /
                             (2.0(Dx * Dx) + (Dy * Dy));
            }
        }
        if(Unew[i][j] - U[i][j] <= tol)
            break;

        else {
            iter = iter + 1;
        }
        U[i][j] = Unew[i][j];
    }
}

它出错

Unew[i][j]=(Dy*Dy*(U[i-1][j]+U[i+1][j])+Dx*Dx*(U[i][j-1]+U[i][j+1])-Dx*Dx*Dy*Dy*(cos (pi*Dx)*sin(pi*Dy)+pi*pi*cos(pi*Dx)*sin(Dy)))/(2.0(Dx*Dx)+(Dy*Dy));
  

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

1 个答案:

答案 0 :(得分:0)

错误接近该行的结尾:

(2.0(Dx*Dx)+(Dy*Dy))  

您需要2.0和括号之间的运算符。 我猜你错过了*

注意:

我用gcc编译了它,得到了更明确的错误信息:

  

错误:被叫对象'2.0e + 0'不是函数