Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
如何访问mex文件中的Matlab结构数组中的数据 我编写了一个C++ MeX函数,以提高一个较大的MATLAB代码的性能。作为mex函数的一部分,我试图从MATLAB中创建的结构数组中读取数据。数组中的每个项都包含一个由复数数组组成的结构。我正在编写的代码理想情况下可以单独访问数组中的每个结构_C++_Arrays_Matlab_Struct_Mex - Fatal编程技术网

如何访问mex文件中的Matlab结构数组中的数据 我编写了一个C++ MeX函数,以提高一个较大的MATLAB代码的性能。作为mex函数的一部分,我试图从MATLAB中创建的结构数组中读取数据。数组中的每个项都包含一个由复数数组组成的结构。我正在编写的代码理想情况下可以单独访问数组中的每个结构

如何访问mex文件中的Matlab结构数组中的数据 我编写了一个C++ MeX函数,以提高一个较大的MATLAB代码的性能。作为mex函数的一部分,我试图从MATLAB中创建的结构数组中读取数据。数组中的每个项都包含一个由复数数组组成的结构。我正在编写的代码理想情况下可以单独访问数组中的每个结构,c++,arrays,matlab,struct,mex,C++,Arrays,Matlab,Struct,Mex,我尝试编写的函数将传递整个数据结构和数组索引。使用这些信息,我想得到指向复数数组的实部和虚部的指针,这些复数数组在matlab结构中的数组索引处 我完全同意,我不了解在c/c++mex文件中如何读取MATLAB结构 这就是我尝试过的 void read_struct(int i, const mxArray* AoS, double *real, double *imag) { /* read_struct: reads real and imaginary pa

我尝试编写的函数将传递整个数据结构和数组索引。使用这些信息,我想得到指向复数数组的实部和虚部的指针,这些复数数组在matlab结构中的数组索引处

我完全同意,我不了解在c/c++mex文件中如何读取MATLAB结构

这就是我尝试过的

    void read_struct(int i, const mxArray* AoS, double *real, double *imag)
{
    /*
        read_struct: reads real and imaginary parts of complex number array from
                 within a Matlab Structure within an array of Structures.

        INPUTS:     i = index of the structure to be accessed
                AoS = Array of Structures

        OUTPUTS:    real - pointer to real part of complex number array
                imag - pointer to imaginary part of complex number array

    */

    // Declare pointers to mxArray
    const mxArray *p_ph_F1, *p_ph_XF1, *p_ph_F2, *p_ph_YF2, *p_ph_F3, *p_ph_ZF3,
              *p_ph_F4, *p_ph_XF4, *p_ph_F5, *p_ph_YF5, *p_ph_F6, *p_ph_ZF6;
    // Declare pointers to real and imaginary parts of Matlab Complex values
        // Real Parts
    double *p_ph_F1_r, *p_ph_XF1_r, *p_ph_F2_r, *p_ph_YF2_r, *p_ph_F3_r, *p_ph_ZF3_r,
           *p_ph_F4_r, *p_ph_XF4_r, *p_ph_F5_r, *p_ph_YF5_r, *p_ph_F6_r, *p_ph_ZF6_r;

    // Find pointer to correct array cell
    const mxArray* ph = mxGetCell(AoS, i);

    //Pointers to complex number arrays
    p_ph_F1 = mxGetField(ph,0,'ph_F1');
    p_ph_XF1 = mxGetField(ph,1,'ph_XF1');
    p_ph_F2 = mxGetField(ph,2,'ph_F2');
    p_ph_YF2 = mxGetField(ph,3,'ph_YF2');
    p_ph_F3 = mxGetField(ph,4,'ph_F3');
    p_ph_ZF3 = mxGetField(ph,5,'ph_ZF4');
    p_ph_F4 = mxGetField(ph,6,'ph_F4');
    p_ph_XF4 = mxGetField(ph,7,'ph_XF4');
    p_ph_F5 = mxGetField(ph,8,'ph_F5');
    p_ph_YF5 = mxGetField(ph,9,'ph_YF5');
    p_ph_F6 = mxGetField(ph,10,'ph_F6');
    p_ph_ZF6 = mxGetField(ph,11,'ph_ZF6');
}
目前,我在尝试编译代码时遇到以下错误:

错误:类型为的参数 “int”与类型为“const char*”的参数不兼容

我已经阅读了MATLAB帮助和示例文件,但我正在努力找到/理解解决方案

任何帮助都将不胜感激


谢谢

发生了两件事:

  • 在C语言中,字符串使用双引号。写入
    mxGetField(ph,0,“ph\u F1”)
    ,而不是
    mxGetField(ph,0,“ph\u F1”)

  • 您得到的元素可能不是您想要的。我认为您打算从相同的结构索引中读取给定字段:

    mxArray const* p_ph_F1  = mxGetField(ph,0,"ph_F1");
    mxArray const* p_ph_XF1 = mxGetField(ph,0,"ph_XF1");
    mxArray const* p_ph_F2  = mxGetField(ph,0,"ph_F2");
    mxArray const* p_ph_YF2 = mxGetField(ph,0,"ph_YF2");
    // etc.
    

  • 一定要测试返回的指针,如果该字段不存在,您将得到一个空指针。

    谢谢Cris。我已经尝试了这个修复,代码现在正在编译。