Mex-file using a vector class definition
7 ビュー (過去 30 日間)
古いコメントを表示
I am trying to create a Mex-file from a C++ code source file to use it with Matlab. I have compiling errors due to the vector class definition handling that I do not understand very well. I would like to know how I should modify the code to work. Below I show the relevant code's parts that I have divided into four sections for clarifying more (Computational code, MexFunction code, Vector class definition and compiling errors):
+ Computational routine's code:
`#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's code:
...
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]);
+ Vector class definition included in 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 y, 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;
...
+ Compiling errors:
>> 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.
0 件のコメント
採用された回答
Kaustubha Govind
2011 年 6 月 20 日
It looks like char16_t has two different definitions in matrix.h (included with MATLAB) and yvals.h (MSVC header), and is causing a conflict. There is a similar discussion here: http://www.mathworks.com/matlabcentral/newsreader/view_thread/281754
The solution using a namespace around matrix.h should be a good way to resolve the issue.
Regarding the rest of your errors, it has to do with your use of Vector object(s) - I'm not sure what code you have at lines 14, 18, 94, 96 and 112, but it looks like you are trying to assign to a const Vector - try discarding the const qualifier for all relevant Vectors.
0 件のコメント
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!