2013-01-04 65 views
0

我试着去MEX一段代码与VS 2010 MATLAB 2012B和收到此错误C2371:'mxArray':重新定义;不同的基本类型

C:\用户\克日什托夫·\桌面\ libocas_v096 \ libocas_v096 \ sparse_mat.h(27):错误C2371:“mxArray ':重新定义;不同的基本类型 C:\程序文件\ MATLAB \ r2012b \的extern \包括\ 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 */ 
+0

重新定义结构不合法C.如果GCC接受代码,那对你来说相当好。你能展示两个结构定义吗? –

+0

它抱怨这一行'的#ifndef MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H 的#define MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H /*版权所有2008 MathWorks公司的*/ /** * 不全发布mxArray 的定义行293.下面部分来自matrix.h */ typedef struct mxArray_tag mxArray; <--- line 293 #endif/* MATHWORKS_MATRIX_MXARRAY_PUB_FWD_H * /' – user1944066

+0

为什么要重新定义它? –

回答

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_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;

相关问题