Ошибка C2371 при компиляции кода MATLAB для развертывания C dll

0

Я пытаюсь скомпилировать C dll, используя VS2010 с MATLAB 2007b. Я получаю эту ошибку:

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
    Не используйте такие определения :(
Теги:
compiler-errors
function-prototypes

1 ответ

0
Лучший ответ

Вероятно, char16_t определяется Matlab и стандартными библиотеками C++ в одно и то же время.

При включении библиотек C вместо

#include <stdlib.h>

использование

#include <cstdlib>

Вместо. т.е. удалить.h и поставить ac спереди.

Это должно помещать их содержимое в пространство имен std, позволяя вам выбирать, что вы хотите.

  • 0
    Я изменился, как вы сказали. У вас есть какое-нибудь решение?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню