Matlab的Mex文件使用矢量类定义

问题描述

| 我正在尝试从C ++代码源文件创建Mex文件,以将其与Matlab结合使用。由于我不太了解矢量类定义的处理方式,因此出现编译错误。我想知道如何修改代码才能正常工作。下面,我显示了相关代码的部分,我将其分为四个部分以进行更多说明(计算代码,MexFunction代码,Vector类定义和编译错误): 计算例程的代码:
#include \"mex.h\"
#include \"SAT_VecMat.h\"

void AccelSolrad (const Vector& r,const Vector& r_Sun,double Area,double mass,double CR,double P0,double AU,const Vector& Accel )
mexFunction的代码:
...
const Vector& r_sat(3);       // dummy argument name for r
const Vector& r_sol(3);       // dummy argument name for r_Sun      
const Vector& outMatrix(3);   // dummy argument name for Accel
...
r_sat = mxGetPr(prhs[0]);
r_sol = mxGetPr(prhs[1]);
plhs[0] = mxCreateDoubleMatrix(1,3,mxREAL);
outMatrix = mxGetPr(plhs[0]);
SAT_VecMat.h中包含的向量类定义:
class Vector
{

  public:

    friend class Matrix;

    // Constructors    
    Vector ();                              // Vector without elements
    Vector (int Size);                      // Nullvector of specified size 
    Vector (const Vector& V);               // Vector copy
    Vector (const double* p,int N);        // Array copy
    Vector (double x,double y,double z);  // 3dim-Vector
    Vector (double x,double z,// 6dim-Vector
            double X,double Y,double Z);  

    // Destructor
    ~Vector();

    // Size
    int size() const { return n; };
    Vector& resize(int Size);

    // Assignment
    Vector& operator=(const double value);
    Vector& operator=(const Vector& V);

    // Component access (Fortran notation)
    double  operator () (int i) const { return v[i]; };
    double& operator () (int i)       { return v[i]; };
    Vector slice (int first,int last) const;
...
编译错误:
    >> mex AccelSolrad.cpp

    AccelSolrad.cpp 

    c:\\program files\\matlab\\r2009b\\extern\\include\\matrix.h(332) : error C2371: \'char16_t\' : redefinition; different basic types

    C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\INCLUDE\\yvals.h(576) : see declaration of \'char16_t\' 

AccelSolrad.cpp(14) : error C2678: binary \'=\' : no operator found which takes a left-hand operand of type \'const Vector\' (or there is no acceptable conversion) 
        d:\\po\\ejemplos\\SAT_VecMat.h(69): could be \'Vector &Vector::operator =(const double)\' 
        d:\\po\\ejemplos\\SAT_VecMat.h(70): or       \'Vector &Vector::operator =(const Vector &)\' 
        while trying to match the argument list \'(const Vector,Vector)\' 

AccelSolrad.cpp(18) : error C2678: binary \'=\' : no operator found which takes a left-hand operand of type \'const Vector\' (or there is no acceptable conversion) 
        d:\\po\\ejemplos\\SAT_VecMat.h(69): could be \'Vector &Vector::operator =(const double)\' 
        d:\\po\\ejemplos\\SAT_VecMat.h(70): or       \'Vector &Vector::operator =(const Vector &)\' 
        while trying to match the argument list \'(const Vector,Vector)\' 

AccelSolrad.cpp(94) : error C2678: binary \'=\' : no operator found which takes a left-hand operand of type \'const Vector\' (or there is no acceptable conversion) 
        d:\\po\\ejemplos\\SAT_VecMat.h(69): could be \'Vector &Vector::operator =(const double)\' 
        d:\\po\\ejemplos\\SAT_VecMat.h(70): or       \'Vector &Vector::operator =(const Vector &)\' 
        while trying to match the argument list \'(const Vector,double *)\' 

AccelSolrad.cpp(96) : error C2678: binary \'=\' : no operator found which takes a left-hand operand of type \'const Vector\' (or there is no acceptable conversion) 
        d:\\po\\ejemplos\\SAT_VecMat.h(69): could be \'Vector &Vector::operator =(const double)\' 
        d:\\po\\ejemplos\\SAT_VecMat.h(70): or       \'Vector &Vector::operator =(const Vector &)\' 
        while trying to match the argument list \'(const Vector,double *)\' 

AccelSolrad.cpp(112) : error C2678: binary \'=\' : no operator found which takes a left-hand operand of type \'const Vector\' (or there is no acceptable conversion) 
        d:\\po\\ejemplos\\SAT_VecMat.h(69): could be \'Vector &Vector::operator =(const double)\' 
        d:\\po\\ejemplos\\SAT_VecMat.h(70): or       \'Vector &Vector::operator =(const Vector &)\' 
        while trying to match the argument list \'(const Vector,double *)\' 

  C:\\PROGRA~1\\MATLAB\\R2009B\\BIN\\MEX.PL: Error: Compile of \'AccelSolrad.cpp\' failed. 
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)