我在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 ++知之甚少。
非常感谢任何帮助!
答案 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));