簡體   English   中英

C2371:'mxArray':重新定義; 不同的基本類型

[英]C2371: 'mxArray' : redefinition; different basic types

我正在嘗試使用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”的聲明

該代碼包含#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 */

嘗試包含標頭"mex.h"而不是"matrix.h"

看來您沒有正確使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM