C中晶圆厂的一些错误

时间:2016-07-20 10:31:42

标签: c++

我在c ++中编写以下函数:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <mex.h>
#include <math.h>
#include "matrix.h"

void funnc(double *f, double *x, long n, long b, double lambda, double theta)
{
    long i;
    long j;
    double u,v,y,z,w;
    y = theta*lambda;
    w = lambda*lambda;
    z = 0.5*(theta+1.0)*w;

    u = 0.0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<b;j++)
        v = fabs(x[i][j]);
        if (v <= lambda)
            u += lambda*v;
        else if (v > y)
            u += z;
        else
            u += 0.5*(v*(2*y - v) - w)/(theta-1.0);
    }

    *f = u;
    return;
}
etc.

实际上,由于以下错误,函数的编译失败:

error C2109: subscript requires array or pointer type 
error C2168: 'fabs' : too few actual parameters for intrinsic function 

请有人纠正我的代码吗?我对C ++知之甚少。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

您的x类型为double*,因此它是一维数组:您无法将内容称为x[i][j]

答案 1 :(得分:2)

你只给出了一个指向你的功能的指针。据我所知,你想得到一张2D桌子。你应该给双倍**而不是双倍* x。

答案 2 :(得分:2)

如果你已经发送了2D数组的第一个元素的地址,那么你必须做正确的指针数学运算:

x[i][j]

因为它是一个单指针。 假设b是2D数组的宽度,您可以这样做:

v = fabs(*(x+i*b+j));