我正在尝试使用VS2010和MATLAB 2007b编译C dll。我收到这个错误:
c:\program files\microsoft visual studio 10.0\vc\include\yvals.h(576): error C2371: 'char16_t' : redefinition; different basic types
c:\program files\matlab\r2007b\extern\include\matrix.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();
}
在搜索解决方案时我尝试了几种方法,但我还没有找到解决此问题的方法。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
可能char16_t由Matlab和C ++标准库同时定义。
包含C库时,而不是
#include <stdlib.h>
使用
#include <cstdlib>
相反。即移除.h并将c放在前面。
这应该将它们的内容放入std
命名空间,允许您选择所需的内容。