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

问题描述 投票:0回答:2

我尝试使用 VS 2010 MATLAB 2012b MEX 一段代码并收到此错误

c:\users\krzysztof\desktop\libocas_v096\libocas_v096\sparse_mat.h(27):错误 C2371:'mxArray':重新定义;不同的基本类型 c:\程序文件\matlab 2012b xtern\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 编译此代码。

克日什托夫

它抱怨第 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 */
c matlab mex
2个回答
0
投票

尝试包含标题

"mex.h"
而不是
"matrix.h"


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;

© www.soinside.com 2019 - 2024. All rights reserved.