我尝试使用VS 2010 MATLAB 2012b来修改代码并获得此错误
c:\ users \ krzysztof \ desktop \ libocas_v096 \ libocas_v096 \ sparse_mat.h(27):错误C2371:'mxArray':重新定义;不同的基本类型 c:\ program files \ matlab \ r2012b \ extern \ include \ matrix.h(293):参见'mxArray'的声明
代码包含#include,其中包含matrix.h
另一个代码包括sparse_mat.h,它重新定义了matrix.h类型,例如
typedef struct {
INDEX_TYPE_T *ir;
INDEX_TYPE_T *jc;
INDEX_TYPE_T m;
INDEX_TYPE_T n;
double *pr;
NNZ_TYPE_T nzmax;
int sparse;
} mxArray;
任何想法如何摆脱这个错误? GCC编译此代码。
Krzysztof
它抱怨第293行。下面是使用此行的matrix.h部分
#ifndef MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H
#define MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H
/* Copyright 2008 The MathWorks, Inc. */
/**
* Published incomplete definition of mxArray
*/
typedef struct mxArray_tag mxArray; <--- line 293
#endif /* MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H */
答案 0 :(得分:0)
尝试添加标题"mex.h"
而不是"matrix.h"
。
答案 1 :(得分:0)
您似乎没有正确使用forward declaration
。
在
typedef struct {
INDEX_TYPE_T *ir;
INDEX_TYPE_T *jc;
INDEX_TYPE_T m;
INDEX_TYPE_T n;
double *pr;
NNZ_TYPE_T nzmax;
int sparse;
} mxArray;
您正在定义一个名为mxArray
的新类型。
在
typedef struct mxArray_tag mxArray;
您正在将类型struct mxArray_tag
别名化为mxArray
,与您已定义的mxArray
发生冲突。
根据您的代码中的注释,您尝试通过转发声明声明mxArray
类型。为您的代码执行此操作的正确方法是typedef mxArray mxArray_tag;
。或者,更自然地,您可以更改mxArray
的完整类型定义,而不是匿名结构:
typedef struct _mxArray {
INDEX_TYPE_T *ir;
INDEX_TYPE_T *jc;
INDEX_TYPE_T m;
INDEX_TYPE_T n;
double *pr;
NNZ_TYPE_T nzmax;
int sparse;
} mxArray;
,前方声明为typedef struct _mxArray mxArray;
。