Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接C++;通过mex到Matlab:传递参数 我需要调用来自MATLAB的C++代码。我知道我必须编写一个mex包装器,但我不知道如何正确地传递参数 调用的C++函数为: foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4)_C++_Matlab_Mex - Fatal编程技术网

链接C++;通过mex到Matlab:传递参数 我需要调用来自MATLAB的C++代码。我知道我必须编写一个mex包装器,但我不知道如何正确地传递参数 调用的C++函数为: foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4)

链接C++;通过mex到Matlab:传递参数 我需要调用来自MATLAB的C++代码。我知道我必须编写一个mex包装器,但我不知道如何正确地传递参数 调用的C++函数为: foo(int* n1,int* n2,int* n3,double* x,double* y,int* n4),c++,matlab,mex,C++,Matlab,Mex,x是进行计算的矩阵,y是输出向量。传递与矩阵维数对应的整数参数时遇到问题 我编写了以下包装器: void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *x, *y; int *n3,*n4; mwSize nrow,ncols; x = mxGetPr(prhs[0]);

x
是进行计算的矩阵,
y
是输出向量。传递与矩阵维数对应的整数参数时遇到问题

我编写了以下包装器:

void mexFunction(
     int          nlhs,
     mxArray      *plhs[],
     int          nrhs,
     const mxArray *prhs[]
     )
{
double  *x, *y;
int *n3,*n4;
mwSize nrow,ncols;

  x = mxGetPr(prhs[0]);
  n3 = mxGetPr(prhs[1]);
  n4 = mxGetPr(prhs[2]);
  nrow = mxGetM(prhs[0]);
  ncols = mxGetN(prhs[0]);

  /* Create a matrix for the return argument */ 
  plhs[0] = mxCreateDoubleMatrix(nrow, 1, mxREAL);
  y = mxGetPr(plhs[0]);


  foo(*nrow,*ncols,*n3, x,y,*n4);
  return;
  }
但是,当我尝试编译时,会出现以下错误:

  • 警告C4267:“=”:从“大小”转换为“mwSize”,可能会丢失数据(n3-n4行)
  • 警告C4267:“=”:从“大小”转换为“mwSize”,可能会丢失数据(nrow,ncol行)
  • 错误C2100:非法间接寻址(foo行)

我似乎不知道该怎么做。任何帮助都将不胜感激

有一些错误,请这样使用,您需要将其强制转换为mwSize以避免警告:

nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4

foo(&nrow,&ncols,n3, x,y,n4);

有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:

nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4

foo(&nrow,&ncols,n3, x,y,n4);

有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:

nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4

foo(&nrow,&ncols,n3, x,y,n4);

有一些错误,请这样使用,您需要将其转换为mwSize以避免警告:

nrow = (mwSize)mxGetM(prhs[0]);
ncols = (mwSize)mxGetN(prhs[0]);
另一个变化是指针是使用“&”传递的,您不需要给出*n4

foo(&nrow,&ncols,n3, x,y,n4);
这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为
size\t
,因此您也应该匹配变量

至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型


这很清楚:您想用
*nrow
*ncols
实现什么?它们不是指针,所以使用
*
是毫无意义的

这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为
size\t
,因此您也应该匹配变量

至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型


这很清楚:您想用
*nrow
*ncols
实现什么?它们不是指针,所以使用
*
是毫无意义的

这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为
size\t
,因此您也应该匹配变量

至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型


这很清楚:您想用
*nrow
*ncols
实现什么?它们不是指针,所以使用
*
是毫无意义的

这里的目标变量小于函数返回的值。显然,MATLAB将这些函数的返回类型更改为
size\t
,因此您也应该匹配变量

至少,这是我的第一个想法。但我在这里错了:当您传递(resp.should传递)变量的地址时,您应该将它们natch为函数所需的类型



这很清楚:您想用
*nrow
*ncols
实现什么?它们不是指针,所以使用
*
是没有意义的。

也许调整变量的类型,使其与实际值匹配会更有用<代码>大小\u t nrow,ncols是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不是最重要的吗?也许调整变量的类型更有用,使它们与实际值相匹配<代码>大小\u t nrow,ncols是的,可能是这样,但在这种情况下,我认为这无关紧要,因为它在foods中作为int传递,但它将以一种干净的方式消除警告。这不重要吗?