在C ++中处理emxArray_real_T数据

时间:2015-10-05 16:47:43

标签: c++ matlab

我已经使用Matlab将一段代码转换为C ++,现在将它们放在MSVC ++中。

我的功能:myFunction获得两个输入并有一个输出。接下来,我尝试输入a,b,然后分配输出,但是我收到了这个错误:错误C3861:' emxCreate_real_T':标识符未找到

函数原型看起来像这样,实质上是C = A + B:

#include "myTestFunction.h"
#include "myTestFunction_emxutil.h"

void myTestFunction(const emxArray_real_T *A, const emxArray_real_T *B,
                    emxArray_real_T *C)
{
  int i0;
  int loop_ub;

  i0 = C->size[0] * C->size[1];
  C->size[0] = A->size[0];
  C->size[1] = A->size[1];
  emxEnsureCapacity((emxArray__common *)C, i0, (int)sizeof(double));
  loop_ub = A->size[0] * A->size[1];
  for (i0 = 0; i0 < loop_ub; i0++) {
    C->data[i0] = A->data[i0] + B->data[i0];
  }
}

这是我的主要功能:

int main() {
    double a[3][3];
    double b[2][2];
    double result[4][4] = {};

emxArray_real_T *inpA, *inpB, *outp;

// define input matrix
double p = 0;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++){
        a[i][j] = p;
        p = p + 1;
    }
}

double k = 0;
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        b[i][j] = k;
        k = k + 1;
    }
}

inpA = emxCreateWrapper_real_T(*a, 3, 3);
inpB = emxCreateWrapper_real_T(*b, 2, 2);
outp = emxCreateWrapper_real_T(*result, 4, 4);

//inpA = emxCreate_real_T(a, 3, 3);
//inpB = emxCreate_real_T(b, 2, 2);
//outp = emxCreate_real_T(result, 4, 4);

myTestFunction(inpA, inpB, outp);

//print result
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++)
        cout << outp[i].data[j] << endl;
}

return 0;

}

我应该如何声明输入和输出?

1 个答案:

答案 0 :(得分:0)

你错过了一个包含文件。根据评论中的link you provided,可能需要包含myTestFunction_emxAPI.h个文件。

另外,我看到你创建的b[2][2]数组被for (int i = 0; i < 3; i++)' and for {(1 j = 0; j&lt; 3; j ++)`循环访问超出其范围。