0

VS 2010 MATLAB 2012b でコードを MEX しようとすると、このエラーが発生します

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' の宣言を参照

コードには、matrix.h を含む #include が含まれています

別のコードには、matrix.h 型を再定義する sparse_mat.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 */
4

2 に答える 2

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_tagmxArray衝突する型にエイリアスを設定しています。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;

于 2013-01-04T10:08:40.950 に答える
0

"mex.h"の代わりにヘッダーを含めるようにしてください"matrix.h"

于 2013-01-04T09:52:18.370 に答える