编译C dll部署MATLAB代码时出现C2371错误

Error C2371 when compiling C dll deployment MATLAB code

本文关键字:C2371 错误 代码 dll 部署 MATLAB 编译      更新时间:2023-10-16

我正在尝试使用VS2010与MATLAB 2007b编译C dll。我得到这个错误:

c:program filesmicrosoft visual studio 10.0vcincludeyvals.h(576): error C2371: 'char16_t' : redefinition; different basic types
c:program filesmatlabr2007bexternincludematrix.h(336) : see declaration of 'char16_t'

代码如下:

#include <FLOAT.H>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include "..OpenCV_Lib.h"
//namespace mat{
#include "..MATCVcomm.h"
//}
//#include "matrix.h"
//using namespace mat;
#define Out plhs[0]
#define Outlist plhs[1]
#define Ref prhs[0]
#define Para    prhs[1]
#define IMAGE_NUM   prhs[2]
/*
    Out:Cell Array m by n
        m:size of input array m
        n:number of member include the groupe + 1
        first member of each cell if indicate n
    ref:Input array
    para:parametor of grouping shown below
        [r num]
        r:radius of groupe
        num:The number of groups extracted by this function
        (in case by that there are a great many groups)
    IMAGE_NUM:Image Index List
*/
#include "groupe.h"

void mexFunction(
                 int nlhs,       mxArray *plhs[],
                 int nrhs, const mxArray *prhs[]
         )
{
    double min = DBL_MAX;
    int i, j;
    if( nrhs < 2 ){
        mexErrMsgTxt("groupe function requirs two input parametor for Matrix of point and [rad num]");
        return;
    }
    int param = mxGetM( Para );
    int Rn = mxGetN( Ref );
    int Rm = mxGetM( Ref );
    double * para = mxGetPr( Para );
    double * pref = mxGetPr( Ref );
    double rad = para[0];
    int gnum;
    if( param > 1 )
        gnum = (int)(para[1]);
    else
        gnum = 0;
    class memlist mem = groupe( pref, Rm, Rn, rad );
    if( nrhs >= 3 ){
        int imnn = mxGetM( IMAGE_NUM );
        if( imnn != Rm ){
            mexErrMsgTxt("Need that Number of ImageIndexList equal Number of KeyList.");
            return;
        }
        double * dimno = mxGetPr( IMAGE_NUM );
        int * imno = new int[imnn];
        for( i = 0; i < imnn; i ++ )
            imno[i] = (int)dimno[i];
        LookBigOrder( mem, imno, pref, Rm, Rn );
    }
    class memlist mem2 = LookBigOrder( mem, gnum );
    Rm = mem2.GetEntrysize()-1;
    if( nlhs >= 2 ){
        Outlist = mxCreateDoubleMatrix( Rm, 2, mxREAL );
        double * l = mxGetPr( Outlist );
        for( i = 0; i < Rm; i ++ )
            l[i] = mem2.GetSize( i );
        for( i = 0; i < Rm; i ++ )
            l[i+Rm] = mem2.GetIndex(mem2.GetSize( Rm ))[i];
    }
    Out = mxCreateCellMatrix( Rm, 1 );
    for( i = 0; i < Rm; i ++ ){
        mxArray * r = mxCreateDoubleMatrix( 1, mem2.GetSize( i ), mxREAL );
        double * l = mxGetPr( r );
        for( j = 0; j < mem2.GetSize( i ); j ++ )
            l[j] = mem2.GetIndex(i)[j];
        mxSetCell( Out, i, r );
    }
    mem.free();
    mem2.free();
}

我已经尝试了几种方法来寻找解决办法,但还没有找到解决这个问题的方法。

我该如何解决这个问题?

谢谢!

char16_t可能是由Matlab和c++标准库同时定义的。

当包含C库时,而不是

#include <stdlib.h>

使用

#include <cstdlib>

。我把。h去掉,在前面加一个c。

这应该把它们的内容放入std命名空间,允许您选择您想要的