转换向量<&燃气轮机;用C++;从MATLAB生成代码后 我用MATLAB编码器将一些MATLAB代码转换成C++。

转换向量<&燃气轮机;用C++;从MATLAB生成代码后 我用MATLAB编码器将一些MATLAB代码转换成C++。,c++,matlab,matlab-coder,C++,Matlab,Matlab Coder,我知道有一些问题与此类似,但我发现的任何解释都无助于解决我的问题,这有些不同 < > C++生成的代码给了我以下函数: void getTargetPoint(const emxArray_real_T *eyeMatrix, const emxArray_real_T *HypAlpha, const emxArray_real_T *HypCov, const emxArray_real_T *HypMean, const do

我知道有一些问题与此类似,但我发现的任何解释都无助于解决我的问题,这有些不同

< > C++生成的代码给了我以下函数:

void getTargetPoint(const emxArray_real_T *eyeMatrix, const emxArray_real_T
                *HypAlpha, const emxArray_real_T *HypCov, const
                emxArray_real_T *HypMean, const double xs[4], double Ymu[3])
其中Ymu是我正在寻找的输出。但是,即使我在转换器中将输入定义为大小不确定的数组,它们也是代码中的向量向量:

eyeMatrix = vector<vector <double>>  
eyeMatrix=vector
它们都有不同的尺寸,例如,eyeMatrix=[968x4],但在任何其他情况下都可能是[anything x 4]

我已经尝试了很多方法,但我无法将输入数据(向量的向量)转换为类型:emxArray\u real\T

有什么办法可以这样做吗?或者我应该将输入数据转换成其他数据,然后再转换成emxArray\u real\T


非常感谢您的任何帮助或想法

该答案假设
eyeMatrix
是一个矩形矩阵(即每个内部向量具有相同的长度),因为生成的代码可能用于非参差不齐的阵列

您可以查看:

有关使用
emxArray*
数据类型的概述,请参阅

为了总结答案,您将在文件
\u emxAPI.h
中声明如下所示的函数:

extern emxArray_real_T *emxCreateWrapper_real_T(double *data, int rows,
                                                int cols);
extern emxArray_real_T *emxCreate_real_T(int rows, int cols);
您会注意到第一个需要一个
double*
。这应该是一个指针,指向按列主顺序存储的数据

由于
eyeMatrix
可能是按行主顺序排列的,实际上可能不是连续的(我不知道嵌套的
std::vectors
会导致连续的数据),因此第一步可以是使用适当的维度调用
emxCreate\u real\T

这将分配并返回一个
emxArray\u real\u T
,我们可以称之为
emx
emx->size
将包含2个元素,它们是您设置的维度。字段
emx->data
将是一个指针,指向
rows*cols
值(
double
值)。然后,您可以以列主方式将数据从
eyeMatrix
复制到
emx->data
。因此,如果矩阵为:

1, 2
3, 4
emx->data
中的数据应为:

1, 3, 2, 4
从那里,只需传递
emx
作为输入


最后,在使用
emxArray\u real\u t
值时,不要忘记调用适当的
emxDestroyArray*
函数来清理任何分配的内存。

每个向量在向量中的大小是否不同?非常感谢@RyanLivingston,我将尝试解决这个问题,我想我现在已经理解了emxArray希望如何接收数据了!听起来不错,非常欢迎@Slash。如果您有其他问题,请发回。我的代码在@RyanLivingston运行得很好!再次感谢,我真的很感激