![](/img/trans.png)
[英]error C2371: 'functionname' redefinition: different basic types
[英]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_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;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.