问题描述
|
我正在尝试从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 (将#修改为@)