C2371:'mxArray':重新定义;不同的基本类型

时间:2013-01-04 00:00:24

标签: c matlab compiler-construction

我尝试使用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 */

2 个答案:

答案 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;